Ejecutar diferentes contenedores docker en el mismo host / puerto diferente

Tengo una aplicación compuesta por varios proyectos de Rails, estoy tratando de dockerize them, cada aplicación se inicia en un puerto de Rails diferente:

  • aplicación principal: 1665
  • admin: 3002
  • website: 3000

Este es mi file docker-compose.yml:

version: '2' services: db: image: postgres:9.6 container_name: acme_db hostname: db.myapp.dev hostname: db.ach ports: - "5432:5432" volumes: - myapp_pgdata:/var/lib/postgresql/data/pgdata environment: - PGDATA=/var/lib/postgresql/data/pgdata - VIRTUAL_HOST=db.myapp.dev networks: - generic myapp: image: acme/myapp container_name: acme_myapp hostname: app.myapp.dev command: rails s -p 1665 -b '0.0.0.0' volumes: - ./myapp:/usr/src/app - $SSH_AUTH_SOCK:/tmp/ssh_auth_sock ports: - "1665:1665" depends_on: - db environment: - SSH_AUTH_SOCK=/tmp/ssh_auth_sock - RAILS_ENV=development - VIRTUAL_HOST=myapp.dev networks: - generic admin: image: acme/admin container_name: acme_admin hostname: admin2.myapp.dev command: rails s -p 3002 -b '0.0.0.0' volumes: - ./admin2:/usr/src/app - $SSH_AUTH_SOCK:/tmp/ssh_auth_sock ports: - "3002:3002" depends_on: - myapp environment: - SSH_AUTH_SOCK=/tmp/ssh_auth_sock - RAILS_ENV=development - VIRTUAL_HOST=admin2.myapp.dev networks: - generic website: image: acme/website container_name: acme_website hostname: web.myapp.dev command: rails s -p 3001 -b '0.0.0.0' volumes: - ./website:/usr/src/app - $SSH_AUTH_SOCK:/tmp/ssh_auth_sock ports: - "3001:3001" environment: - SSH_AUTH_SOCK=/tmp/ssh_auth_sock - RAILS_ENV=development - VIRTUAL_HOST=myapp.dev networks: - generic volumes: myapp_pgdata: external: true networks: generic: external: true 

Ejecutar cada aplicación funciona bien, pero tengo un problema cuando las aplicaciones necesitan comunicarse entre ellas, por ejemplo, el website debe reenviar una request http a la aplicación principal, y cuando lo hace, intenta resolver esta uri: http://app.myapp.dev:1665/register y, la ip resuelta es 127.0.0.1 en lugar del contenedor myapp docker ip.

¿Cómo puedo manejar esta situación? ¿Debo usar nombres de host completamente diferentes para cada contenedor? Idealmente, me gustaría evitar la resolución de DNS, por lo que los raíles intentan golpear app.myapp.dev:1665 lugar de resolver app.myapp.dev y luego resolver 127.0.0.1:1665

Por cierto, estoy usando jwilder/nginx-proxy para resolver contenedores nombres de host de mi computadora portátil.

Alguna idea ?

Su configuration permite que sus contenedores se resuelvan por sus nombres a través de la 'networking' configurada por docker-componte.

Así que el website debería poder acceder a la aplicación principal a través de http://myapp:1665/register