簡體   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