Как настроить сети в docker -композиции? - PullRequest
2 голосов
/ 16 февраля 2020

В хосте я создал 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]# 

и docker контейнер с указанным IP может быть запущен командой:

docker run --net = pub _net --ip = 192.168.2.10 --name hadoop0 --hostname hadoop0 -d -P had oop -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 сеть может быть создана в docker -компонентном файле, а не создана заранее?

Очень признателен за вашу помощь !!!

1 Ответ

2 голосов
/ 16 февраля 2020

Посмотрите внимательно, вы назвали свою сеть put_net, но вместо этого сослались на нее как pub_net в определении службы.

Более того, когда вы определяете сеть как external, это означает, что она уже должна быть создано. Если вы хотите, чтобы docker -составить это для вас, вы можете сделать это вместо этого.

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

Если вы хотите точно воссоздать сеть, указанную в вопросе, вам придется понизить версию с «3» до «2»; Это связано с тем, что некоторые функции были удалены в версии «3», и одним из этих вариантов была возможность указать gateway (по крайней мере, насколько мне известно).

Вот как ваш docker - составить файл будет выглядеть так. (Обратите внимание на изменение версии с «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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...