如果它在Dockerfile中公开,是否可以通过Docker Compose取消它?

时间:2018-03-18 09:42:26

标签: docker docker-compose

假设我有这样的Dockerfile:

FROM ubuntu:16.04

EXPOSE 5000
CMD ["some", "app"]

这样的docker-compose.yml:

version: '2.3'

services:
  app:
    build:
      context: .
    exposes:
      - 6000

在我做docker-compose up -d docker ps输出之后:

CONTAINER ID        NAMES      STATUS              CREATED             PORTS
3315ec1be1b3        app        Up 41 hours         41 hours ago        5000/tcp, 6000/tcp

是否可以取消端口5000并仅留下6000?

2 个答案:

答案 0 :(得分:1)

干净的方法是创建一个新图像:通常,您总是希望您的docker容器和图像可以重现。如果您手动更改偏离图像的内容,则会剥夺自己的行为(管理您正在工作的基础架构的其他人会预期的事情。)

现在,用iptables直接管理DNAT是可行的方法。这个方法的实现在这个answer中给出。

答案 1 :(得分:0)

实际上,任何dockerfile和容器都将继承曾经配置过的所有端口。它是图像元数据的一部分。没有UNEXPOSE,但有一个解决方法,以及#34; docker save"包含所有图层的图像,编辑元数据,以及" docker load"返回修改后的图像,包括历史记录。

由于我经常执行该任务,因此我创建了一个小脚本来完成工作,请查看docker-copyedit