Назад | Перейти на главную страницу

Использует ли перезапуск докера последний образ или тот, с которым был создан контейнер?

Если я создам контейнер с помощью тега / метки

docker run --name some_container -d me/my_image

Обновите изображение с помощью

docker pull me/my_image

И перезапустите контейнер с помощью

docker restart some_container

Какую версию использует новый контейнер?

В docker inspect .Image дает идентификатор конкретного изображения, .Config.Image дает этикетку.

Он использует образ, из которого был создан контейнер. Проверить это довольно просто.

Давайте посмотрим на идентификатор устаревшего изображения:

$ 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

Посмотрите, что у него новый идентификатор изображения:

$ docker images alpine:3.2                 
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
alpine              3.2                 74e49af2062e        3 days ago          5.254 MB

Но контейнер все еще использует более старый идентификатор изображения:

$ 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]

Изображение можно удалить после удаления контейнера, на котором оно основано.