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
: