Is it possible to unexpose port by Docker Compose if it is exposed in Dockerfile?

yiv*_*ivo 5 docker docker-compose

Assume I have such Dockerfile:

FROM ubuntu:16.04

EXPOSE 5000
CMD ["some", "app"]
Run Code Online (Sandbox Code Playgroud)

And such docker-compose.yml:

version: '2.3'

services:
  app:
    build:
      context: .
    exposes:
      - 6000
Run Code Online (Sandbox Code Playgroud)

After I do docker-compose up -d docker ps outputs:

CONTAINER ID        NAMES      STATUS              CREATED             PORTS
3315ec1be1b3        app        Up 41 hours         41 hours ago        5000/tcp, 6000/tcp
Run Code Online (Sandbox Code Playgroud)

Is it possible to unexpose port 5000 and leave only 6000?

Ayu*_*hya 1

干净的方法是创建一个新映像:通常,您总是希望 docker 容器和映像是可重现的。如果您手动更改一些与您的形象不同的内容,您就会剥夺自己的这种行为(这是管理您正在使用的基础设施的其他人所期望的。)

目前,使用 iptables 直接管理 DNAT 是最佳选择。这个答案中给出了这种方法的实现。