【问题标题】:Can't remove old Docker Networking Settings无法删除旧的 Docker 网络设置
【发布时间】:2021-04-20 04:06:53
【问题描述】:

希望你能帮忙。

我有一个旧的 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

谢谢,我们将不胜感激。

【问题讨论】:

  • 如果我理解正确,您只需停止并销毁该容器。
  • 它是从带有这些端口的基础镜像派生的,因此不幸的是,停止和销毁容器将无济于事。当我启动容器时,我会遇到同样的问题。

标签: linux docker networking docker-command


【解决方案1】:

没有 Dockerfile 选项可以删除使用EXPOSE 设置的端口,并且始终为inherited by derived images;您无法删除此值。

但是:

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

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

【讨论】:

  • 谢谢@david,我想关于您的第 2 点是正确的。端口匹配真是太好了。关于第 1 点。当您说它是“未映射”时,输出“8082/tcp”是否会未映射,而输出“0.0.0.0:8091->8091/tcp”是否意味着已映射?交易
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 2016-02-09
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多