Docker撰写服务不公开端口

所以我正在构build一个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。

我试过停止,删除所有的容器,networking和图像,但这仍然存在。

我的EXPOSE没有任何EXPOSE命令,我正在用docker docker-compose run dev运行这个服务。

任何帮助?

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

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