El service de networkingacción de Docker no expone los puertos

Así que estoy construyendo una aplicación Elixir / Phoenix y tengo el siguiente service de 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' 

y esto efectivamente ejecuta la aplicación en 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 

Comprobando con docker ps los puertos no están expuestos:

 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 

Mientras que el service Postgres tiene el puerto expuesto y efectivamente puedo conectarme a él a través de una GUI:

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

No entiendo por qué el service de desarrollo no expone los puertos cuando son los mismos commands / definiciones pero usando 4000 en lugar de 5432.

Intenté detenerme y eliminar todos los contenedores, networkinges e imágenes, pero esto aún persiste.

No tengo ningún command EXPOSE en mi file Docker y estoy ejecutando el service con docker-compose run dev .

¿Alguna ayuda?

Así que finalmente resolví esto, solo tuve que pasar los --service-ports en docker run :

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