如何在docker compose中配置网络?

如何在docker compose中配置网络?,docker,docker-compose,Docker,Docker Compose,在主机中,我使用以下命令创建了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 DRIV

在主机中,我使用以下命令创建了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 Hadoop 0--hostname hadoop 0-d-P hadoop-cluster-hadoop 0: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撰写的文件吗? 如何在docker compose文件中创建docker网络,而不是预先创建


非常感谢你的帮助

仔细看,您将您的网络命名为
put\u net
,但在您的服务定义中将其引用为
pub\u net

此外,当您将网络定义为
external
时,这意味着应该已经创建了网络。如果你想让docker compose为你做这件事,你可以这样做

networks:
    put_net:
        driver: bridge
        ipam:
            driver: default
            config:
                - 
                  subnet: 192.168.2.0/24
如果您想完全重新创建问题中指定的网络,则必须将版本从“3”降级为“2”;这是因为在版本“3”中删除了某些功能,其中一个选项是指定网关的功能(至少据我所知)

下面是docker compose文件的外观。(请注意版本从“3”更改为“2”)


谢谢你的回复。我的坏…,但根据您应用的docker compose文件,只提供了子网参数,如何组合以下命令的其他参数?docker network create-d macvlan \--subnet=192.168.2.0/24 \--gateway=192.168.2.1 \-o parent=eth0 pub_netYes我忘了添加它,我的坏朋友。我现在更新了我的答案,包括如何重新创建这个精确的网络。
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