現状Dockerfileに書けるCMDやENVなどはdocker commitしてしまうと消えてしまいます(https://github.com/dotcloud/docker/issues/1141)。本当は前のオプションのまま残しておいて欲しいのですが出来ないので、今回はdocker commitの時のこのようなオプションを指定する方法について書きます。
docker commitには-runオプションがあり、それによってCMDやENVやEXPOSEなどを指定できるようでした。例えば以下の様な使い方が出来ます。http://docs.docker.io/en/latest/commandline/cli/#change-the-command-that-a-container-runs も参考に。
docker commit -run ' { "Cmd": [ "/usr/bin/supervisord", "-c", "/opt/Sample-App/current/supervisor/supervisord.conf" ], "Env": [ "HOME=/", "PATH=/opt/ruby/bin:/opt/perl/bin:/usr/sbin:/sbin:/usr/bin:/bin", "DEBIAN_FRONTEND=noninteractive" ], "ExposedPorts": { "22/tcp": {}, "8000/tcp": {} } }' 7dd9480063c8 sample-app
ちゃんと調べてないですが、ここで指定できるJSONはdocker inspectの時に出てくるConfigというところに保存しているものっぽいですね。
$ sudo docker inspect 7dd9480063c8 [{ // ... "Args": [ "-c", "cd /docker-registry \u0026\u0026 ./setup-configs.sh \u0026\u0026 ./run.sh" ], "Config": { "Hostname": "7dd9480063c8", "Domainname": "", "User": "", "Memory": 0, "MemorySwap": 0, "CpuShares": 0, "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "PortSpecs": null, "ExposedPorts": { "5000/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "HOME=/", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh", "-c", "cd /docker-registry \u0026\u0026 ./setup-configs.sh \u0026\u0026 ./run.sh" ], "Dns": null, "Image": "stackbrew/registry", "Volumes": { "/tmp/registry": {} }, "VolumesFrom": "", "WorkingDir": "", "Entrypoint": null, "NetworkDisabled": false }, "State": { "Running": true, "Pid": 4793, "ExitCode": 0, "StartedAt": "2013-12-19T08:56:29.577405721Z", "FinishedAt": "0001-01-01T00:00:00Z", "Ghost": false }, // ... }]