在每个独立的docker-compose架构中的docker容器之间进行ping操作(不是同一个docker-compose.yml文件)。

11 浏览
0 Comments

在每个独立的docker-compose架构中的docker容器之间进行ping操作(不是同一个docker-compose.yml文件)。

我在处理两个项目。每个项目都有:

  • 1个docker-compose.yml文件
  • 3个容器(Apache、PHP、MariaDB)

第一个应用是一个网站,需要使用第二个应用的API。

所有关于单个docker-compose架构的互联网主题和文档都不能解决我的问题,因为我的问题涉及到两个特定且独立的docker-compose架构。

最佳网络驱动程序是什么(桥接、主机、覆盖、ipvlan、macvlan、无)?

在docker-compose文件中使用'extra_host'配置是否是必需的?

我是否需要为每个容器声明网络?

为什么在同一个docker-compose容器中ping命令可以正常运行,但在另一个docker-compose架构之间却不行?所有容器都在同一个Docker引擎Windows实例中运行...

进入图像描述

0
0 Comments

问题的出现原因:

在每个项目/`docker-compose.yml`文件中,如果没有另外指定,`docker-compose`会为每个项目创建一个名为`default`的`docker network`,并将项目的每个服务/容器连接到该网络。 这些网络彼此隔离,但主机作为它们的网关与它们相连接(至少在默认配置中)。

解决方法:

要能够访问另一个项目的某个服务,您需要将这两个服务连接到一个共同的网络。例如,可以按照以下方式创建共享网络:

docker network create shared_api_network

项目1的`docker-compose.yml`文件示例如下:

# project 1

services:

apache:

# ...

networks:

- default # 连接到该项目的默认网络,以便apache可以与数据库通信

- shared # 连接到共享网络,以便apache可以与另一个项目的API通信

php:

# ...

db:

# ...

networks:

shared:

name: shared_api_network

external: true

项目2的`docker-compose.yml`文件示例如下:

# project 2

services:

apache:

# ...

networks:

- default # 连接到该项目的默认网络,以便apache可以与数据库通信

- shared # 连接到共享网络,以便其他项目可以调用API

php:

# ...

db:

# ...

networks:

shared:

name: shared_api_network

external: true

通过上述配置,项目1和项目2都连接到了名为`shared_api_network`的共享网络,从而可以彼此通信。

更多信息请参阅docker-compose网络文档

如果你想避免使用`docker network create`命令,可以在其中一个`docker-compose.yml`文件中定义`shared_api_network`网络,并使用自定义网络名称,而另一个`docker-compose.yml`文件保持与上述相同的配置。

0