我有一个运行Nginx的docker compose容器。托管的网站只是一个.test域名,例如example.test
。
同样在容器中,Nginx运行位置代理并将其重定向到example.test:8000
。但它无法连接到那个,因为它实际上是从同一系统(所有桥接网络)上的不同容器托管的。
如何让容器使用example.test
域进行通信?
或者如果我无法让他们通过example.test
进行通信,那么我该如何关联它们以便他们可以使用其泊坞号组合服务名称,例如api
或frontend
?
Docker撰写:
version: '3'
services:
db:
image: postgres
ports:
- "5432:5432"
django:
build: ./api
command: ["./docker_up.sh"]
restart: always
volumes:
- ./api:/app/api
- api-static:/app/api/staticfiles
ports:
- "8000:8000"
depends_on:
- db
environment:
- MODE=DEV
volumes:
frontend-build:
api-static:
certificates:
第二个撰写文件(一起运行):
version: '3'
services:
django:
environment:
- MODE=PROD
#links:
# - hosting
hosting:
build: ./hosting
restart: always
network_mode: bridge
volumes:
- frontend-build:/var/www
ports:
- "80:80"
- "443:443"
environment:
- MODE=PROD
#links:
# - django
volumes:
frontend-build:
使用这些当前设置我运行时会出错
错误:对于92b89f848637_opensrd_hosting_1无法启动服务托管:无法链接到/ opensrd_django_1,因为它不属于默认网络
编辑:改变了docker-compose.prod.yml:
networks:
app_net:
driver: bridge
ipam:
driver: default
config:
-
subnet: 172.16.238.0/24
services:
django:
environment:
- MODE=PROD
networks:
app_net:
ipv4_address: 172.16.238.10
但这给了我一个错误。
错误:撰写文件' ./ docker-compose.prod.yml'无效,因为:
networks.app_net值不允许使用其他属性(' config'意外)
networks.app_net.ipam包含无效类型,它应该是一个对象
答案 0 :(得分:1)
所以我尝试了@ trust512和@DimaL给出的选项,但那些没有用。
但是,从我的撰写文件中删除网络和链接,删除现有的默认网络和构建的容器后,它工作正常,我无法使用db
,django
和{ {1}}。
唯一不同的是我将作曲家版本从3改为3.5。
这些是感兴趣的人的最终文件:
hosting
搬运工-compose.prod.yml:
version: '3.5'
services:
db:
image: postgres
ports:
- "5432:5432"
django:
build: ./api
command: ["./docker_up.sh"]
restart: always
volumes:
- ./api:/app/api
- api-static:/app/api/staticfiles
ports:
- "8000:8000"
depends_on:
- db
environment:
- MODE=DEV
volumes:
frontend-build:
api-static:
答案 1 :(得分:0)
您可以使用pip list
Package Version
-------------- ---------
certifi 2018.4.16
chardet 3.0.4
idna 2.6
pip 10.0.1
pysqlite 2.7.0
requests 2.18.4
requests-cache 0.4.13
urllib3 1.22
(https://docs.docker.com/compose/compose-file/#external_links)或尝试将所有容器放在同一个虚拟网络上。
答案 2 :(得分:0)
据我所知,你只想让他们(django和nginx)链接到作曲?
然后原生解决方案将使用 external_links exampled here 并像这样使用它:
services:
[...]
hosting:
[...]
external_links:
- django_1:example
[...]
其中django_1
代表您提供的撰写创建的容器名称,example
是容器在Django容器中可见的别名。
其他方式您可以通过编辑/etc/hosts
(如果您使用的是linux / mac)将 example.test 域指向特定地址
例如,通过添加像
172.16.238.10 example.test
上述地址指向您的django应用程序(容器)。
通过使用compose(/etc/hosts
)记录的here
extra_hosts
的情况下实现上述目标
此外,如果您更喜欢django / nginx容器的静态IP地址,以防您坚持使用/etc/hosts
od extra_hosts
解决方案,则可以使用另一个本机解决方案,该解决方案可以设置静态IP对于所选服务,请选择正确的here
来自链接文档的经过调整的列表:
services:
[...]
django:
[...]
networks:
app_net:
ipv4_address: 172.16.238.10
networks:
app_net:
driver: bridge
ipam:
driver: default
config:
-
subnet: 172.16.238.0/24