我有两个独立的docker-compose。Yml文件在两个不同的文件夹:
~/front/docker-compose.yml
~/api/docker-compose.yml
我如何确保前面的容器可以在api中向容器发送请求?
我知道——default-gateway选项可以使用docker run为单个容器设置,这样就可以为该容器分配特定的IP地址,但似乎在使用docker-compose时这个选项不可用。
目前,我结束了一个docker检查my_api_container_id,并查看输出中的网关。它是有效的,但问题是这个IP是随机分配的,所以我不能依赖它。
这个问题的另一种形式可能是:
我可以使用docker-compose将一个固定的IP地址归属于特定的容器吗?
但最终我所追求的是:
两个不同的docker-compose项目如何相互通信?
我正在运行多个相同的docker-compose。Yml文件放在不同的目录下,使用.env文件做一些细微的区别。并使用Nginx Proxy Manage与其他服务通信。这是我的文件:
确保已创建公共网络
docker network create nginx-proxy-man
/domain1.com/docker-compose.yml, /domain2.com/docker-compose.yml,…
version: "3.9"
services:
webserver:
build:
context: ./bin/${PHPVERSION}
container_name: "${COMPOSE_PROJECT_NAME}-${PHPVERSION}"
...
networks:
- default # network outside
- internal # network internal
database:
build:
context: "./bin/${DATABASE}"
container_name: "${COMPOSE_PROJECT_NAME}-${DATABASE}"
...
networks:
- internal # network internal
networks:
default:
external: true
name: nginx-proxy-man
internal:
internal: true
.env文件只需更改COMPOSE_PROJECT_NAME
COMPOSE_PROJECT_NAME=domain1_com
.
.
.
PHPVERSION=php56
DATABASE=mysql57
网络服务器。container_name: domain1_com-php56 -将加入默认网络(名称:Nginx - Proxy -man),之前为Nginx代理管理器创建,以便从外部访问。
备注:container_name在同一网络中是唯一的。
数据库。Container_name: domain1_com-mysql57—更容易区分
在同样的docker-compose中。Yml,由于相同的网络domain1_com_internal,服务将通过服务名称相互连接。为了更加安全,请使用internal: true选项设置此网络
注意,如果您没有显式地为每个服务指定网络,而只是为两个docker-compose使用一个公共的外部网络。嗯,那么domain1_com很可能会使用domain2_com的数据库。
每个人都解释得很好,所以我将添加必要的代码,只做一个简单的解释。
使用docker-compose 3.5+版本在docker-compose之外创建的网络(“外部”网络)。
进一步的解释可以在这里找到。
第一个docker-compose。yml文件应该定义名为giveItANamePlease的网络,如下所示。
networks:
my-network:
name: giveItANamePlease
driver: bridge
第一码头的服务。Yml文件可以使用网络如下:
networks:
- my-network
在第二个docker-compose文件中,我们需要使用我们在第一个docker-compose文件中使用的网络名来代理网络,在本例中是giveItANamePlease:
networks:
my-proxy-net:
external:
name: giveItANamePlease
现在你可以在第二个docker-compose服务中使用my-proxy-net了。Yml文件如下。
networks:
- my-proxy-net