![](/img/trans.png)
[英]Rails and Nginx on different Docker containers (how share data between containers)
[英]Running different docker containers on same host/different port
我有一个由多个Rails项目组成的应用程序,我正在尝试对其进行泊坞化,每个应用程序都从不同的Rails端口启动:
这是我的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/register
来website
主应用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.