如果我使用标签创建容器
docker run --name some_container -d me/my_image
使用以下方式更新图像
docker pull me/my_image
并使用以下命令重新启动容器
docker restart some_container
新的容器使用哪个版本?
给出docker inspect
.Image
具体图像的id,.Config.Image
给出标签。
答案1
它使用创建容器时所用的镜像。这很容易验证。
让我们看一下过时图像的图像 ID:
$ docker images alpine:3.2
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
alpine 3.2 137f13b3ac76 8 seconds ago 5.254 MB
太棒了,现在让我们基于该图像创建一个容器:
$ docker create --name test alpine:3.2 sh
1011a97c6ed5dc0249eedc133d4f98197b379a40acc43d74f212a3d49f49db09
我们可以看到容器所基于的图像:
$ docker inspect -f '{{.Image}}' test
137f13b3ac76e253a90cc952c2b5921c41de0f56e8a5833e96f63e6f0c94f228
现在我们获取更新内容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
看到它有一个新的图像ID:
$ docker images alpine:3.2
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
alpine 3.2 74e49af2062e 3 days ago 5.254 MB
但容器仍在使用旧的镜像ID:
$ docker inspect -f '{{.Image}}' test
137f13b3ac76e253a90cc952c2b5921c41de0f56e8a5833e96f63e6f0c94f228
当您查看图像时,您可以看到新的图像和旧的悬空图像:
$ 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
如果您尝试删除旧图像,您将遇到错误:
$ 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]
一旦基于该图像的容器被删除,就可以删除该图像。
答案2
[编辑] 我错了。即使我们重新启动容器,它也会使用先前的映像。
我们需要从相同的标签删除并重新创建容器以使用图像的新修订版本。