繁体   English   中英

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

[英]Running different docker containers on same host/different port

我有一个由多个Rails项目组成的应用程序,我正在尝试对其进行泊坞化,每个应用程序都从不同的Rails端口启动:

  • 主应用程序:1665年
  • 管理员: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,而不是myapp docker容器IP。

我该如何处理这种情况? 我应该为每个容器使用完全不同的主机名吗? 理想情况下,我想避免DNS解析,因此Rails尝试命中app.myapp.dev:1665而不是解析app.myapp.dev然后解析127.0.0.1:1665

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

有什么想法吗 ?

您的设置允许您的容器通过docker-compose设置的“网络”通过名称相互解析。

因此, website应该可以通过http://myapp:1665/registerwebsite主应用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM