Docker compose 服务不暴露端口
Docker compose service does not expose ports
所以我正在构建一个 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
服务不公开完全相同的端口 command/definitions 但使用 4000 而不是 5432。
我已尝试停止并删除所有容器、网络和映像,但问题仍然存在。
我的 Dockerfile 中没有任何 EXPOSE
命令,我 运行 使用 docker-compose run dev
的服务。
有什么帮助吗?
所以我终于解决了这个问题,我只需要在 docker run
中传递 --service-ports
:
所以我正在构建一个 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
服务不公开完全相同的端口 command/definitions 但使用 4000 而不是 5432。
我已尝试停止并删除所有容器、网络和映像,但问题仍然存在。
我的 Dockerfile 中没有任何 EXPOSE
命令,我 运行 使用 docker-compose run dev
的服务。
有什么帮助吗?
所以我终于解决了这个问题,我只需要在 docker run
中传递 --service-ports
: