首页 > 解决方案 > 如何在 docker-compose 中配置网络?

问题描述

在主机中,我使用以下命令创建了 docker 网络:

docker network create -d macvlan \
    --subnet=192.168.2.0/24 \
    --gateway=192.168.2.1  \
    -o parent=eth0 pub_net

码头工人网络显示如下:

[root@192-168-2-70 shell]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
935ae8b52eb2        bridge              bridge              local
81577f72f606        host                host                local
846d54a2c7da        none                null                local
158428b19c4d        pub_net             macvlan             local
[root@192-168-2-70 shell]# 

指定 IP 的 docker 容器可以通过以下命令启动:

docker run --net=pub_net --ip=192.168.2.10 --name hadoop0 --hostname hadoop0 -d -P hadoop-cluster-hadoop0:v1.1

但是当我将上述命令转换为 docker-compose 文件时,如下所示:

version: '3'
services:
    hadoop-cluster-hadoop0:
        container_name: hadoop0
        restart: always
        networks:
            pub_net:
                ipv4_address: 192.168.2.10
        volumes:
            - /tmp/hadoop0/logs:/tmp
        extra_hosts:
            - "hadoop0:192.168.1.10"
            - "hadoop1:192.168.1.11"
            - "hadoop2:192.168.1.12"
            - "dbus-n1:192.168.2.81"
        image: 'hadoop-cluster-hadoop0:v1.1'
networks:
    put_net:
      external: true 

发生以下错误。

[root@192-168-2-70 shell]# docker-compose up -d
WARNING: Some networks were defined but are not used by any service: put_net
ERROR: Service "hadoop-cluster-hadoop0" uses an undefined network "pub_net"
[root@192-168-2-70 shell]# 

有人可以帮我解决如何更正 docker-compose 文件吗?如何在 docker-compose 文件中创建 docker 网络,而不是预先创建?

非常感谢您的帮助!!!

标签: dockerdocker-compose

解决方案


仔细观察,您命名了您的网络put_net,但pub_net在您的服务定义中引用了它。

此外,当您定义网络时,external这意味着它应该已经创建。如果您希望 docker-compose 为您执行此操作,则可以改为执行此操作。

networks:
    put_net:
        driver: bridge
        ipam:
            driver: default
            config:
                - 
                  subnet: 192.168.2.0/24

如果您想完全重新创建您在问题中指定的网络,那么您必须将版本从“3”降级为“2”;这是因为在版本“3”中删除了一些功能,其中一个选项是指定的能力gateway(至少据我所知)。

这是您的 docker-compose 文件的外观。(注意版本从“3”到“2”的变化)

version: '2'
services:
    hadoop-cluster-hadoop0:
        container_name: hadoop0
        restart: always
        networks:
            put_net:
                ipv4_address: 192.168.2.10
        volumes:
            - /tmp/hadoop0/logs:/tmp
        extra_hosts:
            - "hadoop0:192.168.1.10"
            - "hadoop1:192.168.1.11"
            - "hadoop2:192.168.1.12"
            - "dbus-n1:192.168.2.81"
        image: 'hadoop-cluster-hadoop0:v1.1'
networks:
    put_net:
        driver: macvlan
        driver_opts:
            parent: eth0
        ipam:
            config:
                - 
                  subnet: 192.168.2.0/24
                  gateway: 192.168.2.1

推荐阅读