Does docker restart use the latest image or the one the container was created with?

If I create a container using a tag/label

docker run --name some_container -d me/my_image

Update the image with

docker pull me/my_image

And restart the container with

docker restart some_container

Which version does the new container use?

In docker inspect .Image gives the id of the specific image, .Config.Image gives the label.

It uses the image the container was created from. This is pretty easy to verify.

Lets take a look at the image ID for an outdated image:

$ docker images alpine:3.2                 
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
alpine              3.2                 137f13b3ac76        8 seconds ago       5.254 MB

Cool, now lets create a container based off that image:

$ docker create --name test alpine:3.2 sh
1011a97c6ed5dc0249eedc133d4f98197b379a40acc43d74f212a3d49f49db09

We can see the image that container is based off of:

$ docker inspect -f '{{.Image}}' test    
137f13b3ac76e253a90cc952c2b5921c41de0f56e8a5833e96f63e6f0c94f228

Now we pull an updated 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

See that it has a new image ID:

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

But the container is still using the older image ID:

$ docker inspect -f '{{.Image}}' test
137f13b3ac76e253a90cc952c2b5921c41de0f56e8a5833e96f63e6f0c94f228

When you check out the images you can see the new one and the old dangling one:

$ 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

If you tried to delete the old image you will be met with an error:

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

The image can be deleted once the container that is based off it is removed.

[EDIT] I was wrong. The container will use the previous image even we restart it.

We need to delete and re-create the container from the same tag to use the new revision of the image.