如何在docker-compose中配置网络?

3

我在主机上使用以下命令创建了Docker网络:

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

Docker 网络如下所示:

[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 网络,而不是先前创建?

非常感谢您的帮助!!!

1个回答

9

仔细看,你把你的网络命名为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

感谢您的回复。抱歉,但根据您应用的docker-compose文件,只提供了子网参数,如何组合以下命令的其他参数?docker network create -d macvlan
--subnet=192.168.2.0/24
--gateway=192.168.2.1
-o parent=eth0 pub_net
- Ladenjet
是的,我忘记添加了,我的错。我现在更新了我的答案,包括如何重新创建这个精确的网络。 - Peter Emil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接