docker restart 是使用最新的镜像还是创建容器时使用的镜像?

Esa*_*emo 6 docker

如果我使用标签/标签创建容器

docker run --name some_container -d me/my_image

更新图像

docker pull me/my_image

并重新启动容器

docker restart some_container

新容器使用哪个版本?

Indocker inspect .Image给出特定图像的 id,.Config.Image给出标签。

And*_*inn 4

它使用创建容器的映像。这很容易验证。

让我们看一下过期镜像的镜像 ID:

$ docker images alpine:3.2                 
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
alpine              3.2                 137f13b3ac76        8 seconds ago       5.254 MB
Run Code Online (Sandbox Code Playgroud)

酷,现在让我们根据该图像创建一个容器:

$ docker create --name test alpine:3.2 sh
1011a97c6ed5dc0249eedc133d4f98197b379a40acc43d74f212a3d49f49db09
Run Code Online (Sandbox Code Playgroud)

我们可以看到容器所基于的图像:

$ docker inspect -f '{{.Image}}' test    
137f13b3ac76e253a90cc952c2b5921c41de0f56e8a5833e96f63e6f0c94f228
Run Code Online (Sandbox Code Playgroud)

现在我们拉一个更新的alpine:3.2

$ docker pull alpine:3.2
3.2: Pulling from library/alpine
Digest: sha256:1b42caf22e8a6c00e4e7f8c0274495b815336d549317cf694e274832aecf11ed
Status: Image is up to date for alpine:3.2
Run Code Online (Sandbox Code Playgroud)

看到它有一个新的图像 ID:

$ docker images alpine:3.2                 
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
alpine              3.2                 74e49af2062e        3 days ago          5.254 MB
Run Code Online (Sandbox Code Playgroud)

但容器仍在使用旧的镜像 ID:

$ docker inspect -f '{{.Image}}' test
137f13b3ac76e253a90cc952c2b5921c41de0f56e8a5833e96f63e6f0c94f228
Run Code Online (Sandbox Code Playgroud)

当您查看图像时,您可以看到新的图像和旧的悬挂图像:

$ docker images
REPOSITORY         TAG                  IMAGE ID            CREATED             VIRTUAL SIZE
<none>             <none>               137f13b3ac76        51 seconds ago      5.254 MB
alpine             3.2                  74e49af2062e        3 days ago          5.254 MB
Run Code Online (Sandbox Code Playgroud)

如果您尝试删除旧图像,您将遇到错误:

$ docker rmi 137f13b3ac76
Error response from daemon: conflict: unable to delete 137f13b3ac76 (must be forced) - image is being used by stopped container 1011a97c6ed5
Error: failed to remove images: [137f13b3ac76]
Run Code Online (Sandbox Code Playgroud)

一旦基于该镜像的容器被删除,该镜像就可以被删除。