互联网技术 / 互联网资讯 · 2023年11月22日 0

docker-compose网络配置教程

在默认设置下,Docker Compose 会为应用程序创建一个网络。每个容器的服务都可以通过这个默认网络相互连接,并通过与容器名称相同的主机名进行识别。

为应用程序的网络命名时,系统会基于其所在的目录名称自动生成一个名称。您还可以使用 –project-name 参数或 COMPOSE_PROJECT_NAME 环境变量来自定义项目名称。

假设您的应用程序位于名为 Myapp 的目录中,您的 docker-compose.yml 文件内容如下:

version: "3.9"
services:
    web:
        build: .
        ports:
            - "8000:8000"
    db:
        image: postgRes
        ports:
            - "8001:5432"

运行 docker-compose up 时,会执行以下操作:

系统会创建一个名为 Myapp_default 的网络。

容器 web 将基于其配置加入 Myapp_default 网络。

容器 db 也同样基于其配置加入 Myapp_default 网络。

从 Compose 文件格式 2.1 开始,创建的覆盖网络默认是可连接的(attachable),且此特性无法配置。这意味着独立的容器可以连接到该网络。

在 Compose 文件格式 3.x 中,您可以选择将可连接属性设置为 False。

现在,任何容器都可以通过主机名 web 或 db 来获取相应容器的 IP 地址。例如,web 容器中的应用程序可以通过 URL postgRes://db:5432 来连接并使用 PostgRes 数据库。

需要注意的是,host_PORT 和 CONTAINER_PORT 是有区别的。在上述示例中,db 的 host_PORT 是 8001,而容器端口为 5432(这是 PostgRes 的默认端口)。服务间的通信使用 CONTAINER_PORT,而 host_PORT 则用于外部访问服务。

在 web 容器中,连接字符串 db 的格式为 postgRes://db:5432,而在主机上,连接字符串则为 postgRes://{DOCKER_IP}:8001。

[[[IMG_1]]]

[[[IMG_2]]]