在同一主机/不同端口上运行不同的docker容器

我有一个由多个导轨项目组成的应用程序,我试图dockerize他们,每个应用程序启动一个不同的导轨端口:

  • 主要应用程序:1665
  • pipe理员:3002
  • 网站:3000

这是我的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 

运行每个应用程序工作正常,但我有一个问题,当应用程序需要进行沟通,例如该网站需要转发一个HTTP请求的主要应用程序,当它这样做,它试图解决这个URI: http://app.myapp.dev:1665/register ,解决的IP是127.0.0.1,而不是myappdocker容器IP。

我怎样才能pipe理这种情况? 我应该为每个容器使用完全不同的主机名吗? 理想情况下,我想避免DNSparsing,所以rails试图打app.myapp.dev:1665而不是parsingapp.myapp.dev ,然后parsing127.0.0.1:1665

顺便说一句,我使用jwilder/nginx-proxy从我的笔记本电脑parsing容器主机名。

有什么想法吗 ?

您的设置允许您的容器通过由docker-compose设置的“networking”按名称parsing对方。

所以website应该可以通过http://myapp:1665/register来打开主应用程序