我有几个php服务器,我们将它们命名为api1,api2。我已经设置了docker-compose文件,该文件可以与nginx链接成功运行它们,因此可以从主机访问它们并且工作正常。
这是我的docker-compose.yml的示例:
version: "3.5"
services:
nginx:
user: "root:root"
image: nginx:stable
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./cert:/etc/nginx/ssl/
- ./vhosts/:/etc/nginx/conf.d/:cached
- ./logs/nginx:/var/log/nginx:cached
- ${ACCOUNT_PATH}:/var/www/api1:cached
- ${ACCOUNT_API_PATH}:/var/www/api2:cached
api1:
image: php-fpm-image
build:
context: "."
dockerfile: "./images/api1/Dockerfile"
user: "root:root"
container_name: account
working_dir: /var/www/api1/
volumes:
- api1path/:/var/www/api1
api2:
image: php-fpm-image
build:
context: "."
dockerfile: "./images/api2/Dockerfile"
user: "root:root"
container_name: api2
working_dir: /var/www/api2/
volumes:
- api2:/var/www/api2:cached
networks:
default:
name: domain.com
driver: bridge
与此docker-compose文件关联以进行功能测试:
version: '3.5'
services:
apitests:
image: apitests:latest
container_name: api_tests
volumes:
- ./config/:/opt/project/config/
- ./test_reports/screenshots:/root/.selene/screenshots/
networks:
default:
driver: bridge
external:
name: domain.com
可以从主机访问以下域:
api1.domain.com 127.0.0.1
api2.domain.com 127.0.0.1
我的问题是如何直接在docker内部连接它们,因为我需要执行从api1到api2,从apitests到api1,api2的请求。
当我请求时,他们的域直接解析到了他们的容器,所以我收到下一个错误
无法连接到远程主机(172.21.0.8):连接被拒绝
来自任何容器。
如您所知,我需要将其域解析为NGINX容器,以便它可以正常工作,并且php-fpm可以通过nginx将结果返回给我。
我该如何实现?
答案 0 :(得分:2)
您的问题似乎是,当您的要求是为nginx容器分配此域名时,您已将php容器命名为api1.domain.com。
您可以在容器网络中为nginx分配api1 / api2别名。
services:
nginx:
networks:
default:
aliases:
- api1
- api2
答案 1 :(得分:0)
如果我说对了,则您有几个docker-compose.yml
文件,需要它们提供服务才能彼此交互。逻辑建议是建立一个全球定义的网络,
docker network create testapis
并已将所有服务链接到它:
docker-compose.yml
...
networks:
default:
external:
name: testapis
在这种情况下,所有docker-compose
文件中的所有服务都将以其主机名(api1
,api2
等)相互查看,并且不需要暴露端口(除非您希望使用该网外的服务)