$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

docker commitでCMDやENVなどを指定する

 現状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
    },
    // ...
}]