-
Notifications
You must be signed in to change notification settings - Fork 256
Changing the address for a port mapping doesn't cause the container to be re-created. #1701
Description
Description
It looks like changing the interface where a port is mapped does not count as a difference in the container configuration, so the old container is kept in place.
Steps to reproduce the issue:
Create a docker-compose configuration with a port mapped to all interfaces, then modify the configuration to map the port only on 127.0.0.1.
mgax@one:demo$ cat docker-compose.yml
version: "3"
services:
nginx:
image: nginx
ports:
- 8000:80
mgax@one:demo$ docker compose up -d
[+] Building 7.3s (5/5) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 47B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/nginx:latest 1.7s
=> [1/1] FROM docker.io/library/nginx@sha256:df13abe416e37eb3db4722840dd479b00ba193ac6606e7902331dc 5.5s
=> => resolve docker.io/library/nginx@sha256:df13abe416e37eb3db4722840dd479b00ba193ac6606e7902331dc 0.0s
=> => sha256:df13abe416e37eb3db4722840dd479b00ba193ac6606e7902331dcea50f4f1f2 1.86kB / 1.86kB 0.0s
=> => sha256:eba373a0620f68ffdc3f217041ad25ef084475b8feb35b992574cd83698e9e3c 1.57kB / 1.57kB 0.0s
=> => sha256:f0b8a9a541369db503ff3b9d4fa6de561b300f7363920c2bff4577c6c24c5cf6 7.74kB / 7.74kB 0.0s
=> => sha256:69692152171afee1fd341febc390747cfca2ff302f2881d8b394e786af605696 27.15MB / 27.15MB 0.7s
=> => sha256:49f7d34d62c18a321b727d5c05120130f72d1e6b8cd0f1cec9a4cca3eee0815c 26.58MB / 26.58MB 1.4s
=> => sha256:5f97dc5d71ab2675126dba76dbe161c839043fb3e3ccaaf58ba78b394cdd37b0 602B / 602B 0.5s
=> => sha256:cfcd0711b93a41eb07234fa93b0c2ce39be93a71a743dd76766e67a0133163e8 894B / 894B 0.8s
=> => sha256:be6172d7651be2625df008a2bb6cbaf2139cbf1e50ae16256791e54e8dde8449 666B / 666B 0.9s
=> => sha256:de981387034241b38875f3151654b3bd9ef4afe396eec23dce7cb73134d2867b 1.39kB / 1.39kB 1.4s
=> => extracting sha256:69692152171afee1fd341febc390747cfca2ff302f2881d8b394e786af605696 2.4s
=> => extracting sha256:49f7d34d62c18a321b727d5c05120130f72d1e6b8cd0f1cec9a4cca3eee0815c 1.5s
=> => extracting sha256:5f97dc5d71ab2675126dba76dbe161c839043fb3e3ccaaf58ba78b394cdd37b0 0.0s
=> => extracting sha256:cfcd0711b93a41eb07234fa93b0c2ce39be93a71a743dd76766e67a0133163e8 0.0s
=> => extracting sha256:be6172d7651be2625df008a2bb6cbaf2139cbf1e50ae16256791e54e8dde8449 0.0s
=> => extracting sha256:de981387034241b38875f3151654b3bd9ef4afe396eec23dce7cb73134d2867b 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:df808f286858bf54e8beb836b4224c9820926485b706d40a7d8080e63fd3ebd3 0.0s
=> => naming to docker.io/library/nginx 0.0s
[+] Running 2/2
⠿ Network demo_default Created 0.1s
⠿ Container demo_nginx_1 Started 0.7s
mgax@one:demo$ docker compose ps
NAME SERVICE STATUS PORTS
demo_nginx_1 nginx running 0.0.0.0:8000->80/tcp, :::8000->80/tcp
mgax@one:demo$ vim docker-compose.yml
mgax@one:demo$ cat docker-compose.yml
version: "3"
services:
nginx:
image: nginx
ports:
- 127.0.0.1:8000:80
mgax@one:demo$ docker compose up -d
[+] Running 1/0
⠿ Container demo_nginx_1 Running 0.0s
mgax@one:demo$ docker compose ps
NAME SERVICE STATUS PORTS
demo_nginx_1 nginx running 0.0.0.0:8000->80/tcp, :::8000->80/tcp
mgax@one:demo$
Describe the results you received:
The container is not recreated and the port stays mapped to the 0.0.0.0 address.
Describe the results you expected:
The container should be recreated with the new port mapping.
Additional information you deem important (e.g. issue happens only occasionally):
Running docker compose down and then docker-compose up -d re-maps the port correctly.
mgax@one:demo$ docker compose down
[+] Running 2/2
⠿ Container demo_nginx_1 Removed 0.2s
⠿ Network demo_default Removed 0.1s
mgax@one:demo$ docker compose up -d
[+] Running 2/2
⠿ Network demo_default Created 0.1s
⠿ Container demo_nginx_1 Started 0.6s
mgax@one:demo$ docker compose ps
NAME SERVICE STATUS PORTS
demo_nginx_1 nginx running 127.0.0.1:8000->80/tcp
Output of docker version:
mgax@one:demo$ docker version
Client: Docker Engine - Community
Cloud integration: 1.0.14
Version: 20.10.6
API version: 1.41
Go version: go1.13.15
Git commit: 370c289
Built: Fri Apr 9 22:46:45 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.6
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 8728dd2
Built: Fri Apr 9 22:44:56 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.4
GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Output of docker context show:
You can also run docker context inspect context-name to give us more details but don't forget to remove sensitive content.
mgax@one:demo$ docker context show
default
Output of docker info:
mgax@one:demo$ docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
compose: Docker Compose (Docker Inc., 2.0.0-beta.1)
Server:
Containers: 2
Running: 2
Paused: 0
Stopped: 0
Images: 2
Server Version: 20.10.6
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.19.0-16-amd64
Operating System: Debian GNU/Linux 10 (buster)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.902GiB
Name: one
ID: K525:E74M:VLPG:JPTG:6FKD:JD3M:SJST:DBXB:N3EL:DT4I:OTUK:IFBM
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: No swap limit support
Additional environment details (AWS ECS, Azure ACI, local, etc.):