Docker Compose Nginx链接容器
我有一个运行Nginx的docker compose容器。托管的站点只是一个.test域,如Docker Compose Nginx链接容器,docker,nginx,proxy,docker-compose,Docker,Nginx,Proxy,Docker Compose,我有一个运行Nginx的docker compose容器。托管的站点只是一个.test域,如example.test 此外,在容器中,Nginx运行位置代理并将其重定向到示例。test:8000。但它无法连接到该服务器,因为它实际上是从同一系统(所有桥接网络)上的不同容器托管的 如何让容器使用example.test域进行通信 或者,如果我无法让他们通过示例进行通信。测试,那么我如何链接他们,以便他们可以使用自己的docker compose服务名称,例如api或前端 Docker compos
example.test
此外,在容器中,Nginx运行位置代理并将其重定向到示例。test:8000
。但它无法连接到该服务器,因为它实际上是从同一系统(所有桥接网络)上的不同容器托管的
如何让容器使用example.test
域进行通信
或者,如果我无法让他们通过示例进行通信。测试
,那么我如何链接他们,以便他们可以使用自己的docker compose服务名称,例如api
或前端
Docker compose:
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:
第二个合成文件(一起运行):
使用这些当前设置,运行时会出现错误
错误:对于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
version: '3.5'
services:
django:
environment:
- MODE=PROD
hosting:
build: ./hosting
restart: always
volumes:
- frontend-build:/var/www
ports:
- "80:80"
- "443:443"
environment:
- MODE=PROD
volumes:
frontend-build:
但这给了我一个错误
错误:合成文件“/docker Compose.prod.yml”无效,因为:
networks.app_净值不允许有其他属性('config'意外)
networks.app_net.ipam包含无效类型,它应该是一个对象
您可以使用
外部链接
()或尝试将所有容器放在同一个虚拟网络上。据我所知,您只是希望它们(django和nginx)跨组件链接
然后本机解决方案将是使用外部链接
然后像这样使用它:
services:
[...]
hosting:
[...]
external_links:
- django_1:example
[...]
其中,django_1
代表由您提供的compose创建的容器名称,example
是容器在django容器内可见的别名
反过来您可以只指向一个示例。通过编辑您的/etc/hosts
(前提是您在linux/mac上工作)将域测试到特定地址
例如,添加一条记录,如
172.16.238.10 example.test
上面的地址将指向您的django应用程序(容器)
通过使用compose(extra_hosts
)中的本机解决方案,可以在不改变您的/etc/hosts
的情况下实现上述功能
此外,如果您更喜欢django/nginx容器的静态ip地址,以防您坚持使用/etc/hosts
odextra_hosts
解决方案,那么您可以使用compose提供的另一个本机解决方案,为所选服务设置静态ip,如
链接文档中的调整列表:
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
所以我尝试了@trust512和@DimaL给出的选项,但这些都不起作用 但是,在从我的compose文件中删除网络和链接,并删除现有的默认网络和构建的容器之后,它起了作用,并且我无法在使用
db
、django
和托管的容器之间进行引用
唯一不同的是我将composer版本从3改为3.5
以下是所有感兴趣的人的最终文件:
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:
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
version: '3.5'
services:
django:
environment:
- MODE=PROD
hosting:
build: ./hosting
restart: always
volumes:
- frontend-build:/var/www
ports:
- "80:80"
- "443:443"
environment:
- MODE=PROD
volumes:
frontend-build:
当我尝试外部链接时,我遇到了与之前相同的错误,无法启动服务托管:无法链接到/opensrd\u django\u 1,因为它不属于默认网络
。至于网络,只要在子网范围内,我就可以随机指定自己的IP吗?