0

我希望你能帮忙。

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

谢谢,任何帮助将不胜感激。

4

1 回答 1

0

没有 Dockerfile 选项可以删除已设置的端口EXPOSE,并且它始终由派生图像继承;你不能删除这个值。

然而:

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

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

于 2021-04-20T10:36:34.510 回答