无法删除旧的 Docker 网络设置

Can't remove old Docker Networking Settings

希望能帮到你

我有一个旧的 docker 图像配置为网络公开端口 8082。我使用这个图像作为我的基础图像来创建一个新的容器,但我似乎无法摆脱旧的网络设置。 我的新 Dockerfile 或 docker-composer 文件中未指定 8082 端口,但它仍然出现。我的新端口是 8091.

server@omv:~/docker/app$ docker container ls
CONTAINER ID   IMAGE              COMMAND            CREATED         STATUS         PORTS                                                NAMES
f023f6a0a792   api_app_image   "/entrypoint.sh"   3 minutes ago   Up 3 minutes   80/tcp, 8082/tcp, 0.0.0.0:8091->8091/tcp   api_app

这是我的 docker-composer 文件。

api_app:
     container_name: api_app
     build:
      context: ./api
      dockerfile: Dockerfile
     ports:
     - "8091:8091"
     volumes:
     - ./api/app:/var/www/html/apiapp

这是我的 Dockerfile 中的一个片段

FROM bde8c3167970 

VOLUME /etc/nginx/conf.d

VOLUME /var/www/html/apiapp

COPY entrypoint.sh /entrypoint.sh

RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]


EXPOSE 80 8091

谢谢,如有任何帮助,我们将不胜感激。

没有 Docker 文件选项可以删除使用 EXPOSE, and it is always 设置的端口;您无法删除此值。

但是:

  1. 在现代 Docker 中,简单地“公开”端口(与“已发布”不同)几乎没有任何意义。它在 docker ps 输出中显示为未映射,如果您使用 docker run -P 选项发布所有暴露的端口,它将被分配一个任意主机端口,仅此而已。暴露额外的端口没有坏处。

  2. 由于每个容器 运行 都在一个隔离的网络命名空间中,因此在多个容器中使用相同的端口没有任何坏处。容器端口不必与主机端口匹配。如果基础镜像期望 运行 端口 8082 上的应用程序,我会在派生镜像中继续这样做;在 Compose 设置中,您可以设置 ports: ['8091:8082'] 以选择不同的主机端口。