Docker - 从图像中检索命令行

时间:2016-05-17 09:22:11

标签: command-line docker

我想知道是否有办法检索启动容器的“docker run”命令?

因为我想将一些参数添加到已停止的容器中,我需要检索原始命令,添加我的新参数并启动它。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您想要更改的唯一内容是重启策略,您现在可以(在docker引擎1.11中)使用docker-update。 docker-update可以应用于正在运行或已停止的容器,请参阅man docker-update,例如:

# docker update --restart=unless-stopped containername

docker ps的输出中提供了一些有用的信息,特别是端口映射,例如:

# docker ps
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                  NAMES
75d1e6adbb37        my-fancy-image      "/usr/sbin/sshd -D"   22 hours ago        Up 22 minutes       0.0.0.0:8022->22/tcp   fancy_torvalds

用于启动容器的所有其他命令行参数都可以在docker inspect的输出中找到,例如:

# docker inspect containername
    ...
    "Path": "/usr/sbin/sshd",
    "Args": [
        "-D"
    ],
    ...
    "HostConfig": {
        "Binds": [
            "/home/user/workspace/thing:/home/other/workspace/thing"
        ],
    ...
        "PortBindings": {
            "22/tcp": [
                {
                    "HostIp": "",
                    "HostPort": "8022"
                }
            ]
        },
        "RestartPolicy": {
            "Name": "unless-stopped",
            "MaximumRetryCount": 0
        },
    ...

如果它不是您想要更改的重启策略(并且您的容器中确实有应用程序数据),则可以将容器保存为映像,然后将其作为新容器运行。这应该不会占用大量额外的磁盘空间。您不需要将其推送到任何存储库:

# docker commit -m="Message" -a="Author Name" containername username/imagename:latest
# docker run <new options here> username/imagename:latest

我必须质疑你为什么要这样做。您是否将所有应用程序数据包含在与应用程序本身相同的容器中,这使您不愿意删除容器并使用您的首选选项启动新容器?关于这个主题有很多很好的讨论,特别是: