Docker撰写服务不会暴露端口

时间:2017-10-15 11:44:22

标签: docker elixir docker-compose phoenix-framework docker-networking

所以我正在构建一个Elixir / Phoenix应用程序,并且我已经获得了以下docker-compose服务:

dev:
    extends:
      service: common
    environment:
      POSTGRES_HOST: "postgres.dev"
      MIX_ENV: dev
    ports:
      - "4000:4000"
    depends_on:
      - postgres
    command: >
      bash -c '
      cd $$APP_HOME \
      && mix ecto.create \
      && mix ecto.migrate \
      && iex -S mix phx.server'

这有效地在0.0.0.0:4000上运行应用程序:

Erlang/OTP 20 [erts-9.1.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]

[info] Running MyApp.Endpoint with Cowboy using http://0.0.0.0:4000

检查docker ps端口是否未公开:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7a1d80cf0511        app_dev         "bash -c ' cd $APP..."   4 minutes ago       Up 4 minutes                                 app_dev_run_2
ef7bed51cf24        postgres:10.0       "docker-entrypoint..."   16 minutes ago      Up 16 minutes       0.0.0.0:5432->5432/tcp   app_postgres_1

虽然Postgres服务有暴露的端口,我可以通过GUI有效地连接到它:

postgres:
    image: postgres:10.0
    ports:
      - "5432:5432"
    networks:
      default:
        aliases:
          - postgres.dev
    restart: always

我不明白为什么dev服务在他们使用完全相同的命令/定义但使用4000而不是5432时不会公开端口。

我已尝试停止,删除所有容器,网络和图片,但这仍然存在。

我的Dockerfile中没有EXPOSE个命令,而且我使用docker-compose run dev运行服务。

任何帮助?

1 个答案:

答案 0 :(得分:2)

所以我终于解决了这个问题,我只需通过--service-ports中的docker run

https://docs.docker.com/compose/reference/run/