我有两个项目(a和b),它们都有一个docker-compose.yml文件。现在,我希望其中一个项目能够调用另一个项目的服务,据我所知,我需要为此创建一个公共的docker网络。因此,为了创建一个最小的示例,我制作了两个文件夹(a/
和b/
),它们都包含docker-compose.yml
文件。
这是文件夹a/
中的一个:
version: '3'
services:
common_server:
image: ubuntu
ports:
- 4444:4444
command: >
bash -c '
apt update && apt install netcat -y &&
while true; do echo -e "HTTP/1.1 200 OK\n\npong" | nc -k -l -p 4444 -q 1; done'
# networks:
# - my_network
project_a:
image: ubuntu
depends_on:
- common_server
# networks:
# - my_network
command: >
bash -c '
apt update && apt install curl -y &&
while true; do echo "Calling the container"; echo "AAAAAAAA"; curl common_server:4444; sleep 10; done'
#networks:
# my_network:
# driver: bridge
这设置了两件事:
common_server
:一个简单的ping / pong服务器,它对收到的每个请求都响应” pong”project_a
:每10秒调用一次common_server
的简单客户端] >>这样的效果很好。我使用以下命令迅速检查了docker网络:
$ docker network ls NETWORK ID NAME DRIVER SCOPE 5ac503033848 a_default bridge local <== THIS NETWORK WAS CREATED 1f65f9c91441 bridge bridge local 72fcb38f2060 host host local b76cd7ef1ac9 none null local
[我在文件夹
b/
中还有第二个docker-compose.yml文件,我还想从其中调用上面文件中定义的common_server
。因此,我在上面的文件中取消了与网络的注释,以启用my_network
。运行起来也很棒。再次检查
docker network ls
时,我还会看到它创建的第二个网络:
$ docker network ls NETWORK ID NAME DRIVER SCOPE 5ac503033848 a_default bridge local <== CREATED BY THE FIRST RUN f0a42e17007b a_my_network bridge local <== CREATED BY THE SECOND RUN 1f65f9c91441 bridge bridge local 72fcb38f2060 host host local b76cd7ef1ac9 none null local
然后我启动了第二个docker-compose文件:
version: '3' services: project_b: image: ubuntu command: > bash -c ' apt update && apt install curl -y && while true; do echo "Calling the container"; echo "BBBBBBB"; curl common_server:4444; sleep 10; done' networks: - a_my_network networks: a_my_network: external: true
也可以。它可以从第一个docker-compose文件中调用
common_server
。我的第一个问题:尽管我在第一个文件中将网络定义为
my_network
,但码头工人将其称为a_my_network
。有没有一种方法可以定义网络,以便在两个docker-compose文件中都可以称呼它?
然后我决定使用docker network prune
删除这两个网络,然后重新开始。不幸的是,当我现在再次运行第一个文件时,现在出现以下错误:
$ docker-compose up Creating network "a_my_network" with driver "bridge" Starting a_common_server_1 ... error ERROR: for a_common_server_1 Cannot start service common_server: network f0a42e17007bc0f352042f5394aef65be18bb12c7836e8864ecb734f83a421d7 not found ERROR: for common_server Cannot start service common_server: network f0a42e17007bc0f352042f5394aef65be18bb12c7836e8864ecb734f83a421d7 not found ERROR: Encountered errors while bringing up the project.
所以,我的第二个问题:如果我首先通过未明确定义网络来创建
a_default
网络,为什么只能启动第一个docker-compose文件?
我有两个项目(a和b),它们都有一个docker-compose.yml文件。我现在希望其中一个项目能够调用另一个项目的服务,据我所知,我需要创建一个...
您可以使用-p或--project-name标志或COMPOSE_PROJECT_NAME环境变量来更改网络名称。
并且可能在这里看到:https://docs.docker.com/compose/networking/#use-a-pre-existing-network
当您在第二个文件中声明网络时,可以显式指定其name:
。