重新启动Docker容器"记住"初始运行参数吗?

sme*_*eeb 15 docker

我使用非常(8行)长的参数列表运行了一个Docker容器:

docker run -d -p 5000:5000 --restart=always --name registry \
    -v `pwd`/auth:/auth \
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
    -v `pwd`/certs:/certs \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
    -e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
    registry:2
Run Code Online (Sandbox Code Playgroud)

我确认这是通过docker ps以下方式运行:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
ff9c654bfc39        registry:2          "/bin/registry /etc/d"   2 days ago          Up 13 minutes       0.0.0.0:5000->5000/tcp   registry
Run Code Online (Sandbox Code Playgroud)

然后我通过这个容器停了下来docker stop ff9c654bfc39.然后,我尝试通过发出docker run ...与第一次完全相同的(8个衬垫)来重新运行容器:

Error response from daemon: Conflict. The name "registry" is already in use by container ff9c654bfc39. You have to delete (or rename) that container to be able to reuse that name.
Run Code Online (Sandbox Code Playgroud)

所以,我只是尝试了docker restart ff9c654bfc39,这似乎工作,但我不是100%肯定Docker"记住"我最初运行容器时的8行参数.关于它是否记忆的任何想法?如果没有,那么包含这8行的正确重启命令是什么?

Aur*_*iot 13

正如@gabowsky在评论中解释的那样,是的,Docker会记得.

使用start,stoprestart不会破坏容器,因此记住所有内容,包括数据(甚至主机的重启之间).什么stop是停止在容器内运行的进程.就这样.

此外,Docker以内部格式存储所有上下文,变量等.您不必再次指定命令行参数.要查看Docker对容器的了解,您可以运行docker inspect.

相反,rm将破坏所有内容,包括没有持久化数据,并且需要再次重新创建容器(这次再次给出参数).

最后要注意的是,在命令行中引用容器时,应该使用名称而不是SHA1