Docker создает статическую IP-адресацию

#linux #docker #networking #docker-compose

#linux #docker #сеть #docker-compose

Вопрос:

Я пытаюсь развернуть приложение со статическим IP-адресом и единой сетью, используя docker-compose (формат файла версии 3.8), я могу их создать, но ip-адрес неправильно присваивается контейнеру.

docker-compose.yml

 version: "3.8"
services:

  nzbhydra2:
    image: linuxserver/nzbhydra2
    container_name: nzbhydra2
    networks:
      mediacenter_network:
        ipv4_address: 172.16.238.10
    restart: always
    environment:
      - PUID=1000
      - PGID=1000
    ports:
      - "5076:5076"
    volumes:
      - /opt/docker/plex/config:/config
      - /opt/docker/jackett/downloads:/downloads

networks:

    mediacenter_network:
      ipam:
        driver: default
        config:
          - subnet: "172.16.238.0/24"
            gateway: 172.16.238.1


  

Результирующие сетевые настройки из этого следующие:

 "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "0fab46506aeab52588e2b84e676202150b7016c9be49e7958bf9e367f0bd069d",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "5076/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "5076"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/0fab46506aea",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "compose_mediacenter_network": {
                    "IPAMConfig": {
                        "IPv4Address": "172.16.238.10"
                    },
                    "Links": null,
                    "Aliases": [
                        "nzbhydra2",
                        "47aad4695014"
                    ],
                    "NetworkID": "c5953a22f478497c72036bafef32be639200ad69fb37403a6ceb8d23b2ba28d0",
                    "EndpointID": "6138c474befd3449b4c274021bfe212e0dc9ea3e6fd0840171048b5d38b33a11",
                    "Gateway": "172.16.238.1",
                    "IPAddress": "172.16.238.10",
                    "IPPrefixLen": 24,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:10:ee:0a",
                    "DriverOpts": null
                }
            }
        }


  

Обратите внимание, что IP-адрес не присваивается в «»IPAddress»: «»,»

Я хочу, чтобы это выглядело так, как если бы я делал это вручную, например:

 
docker create 
  --name=nzbhydra2_manual_create 
  --restart=always 
  -e PUID=1000 
  -e PGID=1000 
  -p 5077:5076 
  -v /opt/docker/plex/config:/config 
  -v /opt/docker/jackett/downloads:/downloads 
  linuxserver/nzbhydra2

  

Делая это таким образом, я вижу, что IP-адрес назначается в настройках сети:

         "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "2c55f7b547827ef3c9db0299875bfb0c630d407e882ec43011025fcd2b6e6f3b",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "5076/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "5077"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/2c55f7b54782",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "23442bcbcf2d2f48b1109d92187e5596989f59fdf26c75784b5027ff52593a72",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "34eef2e62215d1bb10f7513207d4d105ed717dc8d1fed48c180cee7ed75cbaab",
                    "EndpointID": "23442bcbcf2d2f48b1109d92187e5596989f59fdf26c75784b5027ff52593a72",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }


  

Вот как они выглядят в Portainer:

Создано вручную:

Создано с помощью Compose:

Может кто-нибудь, пожалуйста, дайте мне знать, что я делаю неправильно в файле Docker Compose?

Комментарии:

1. Почему вы делаете неправильно? Работает ли подключение к Интернету внутри контейнера?

2. Я добавил больше контейнеров, но они не могут обмениваться данными между ними внутри одной сети, но если я создам их вручную, они смогут обмениваться данными.

Ответ №1:

Оказывается, я не делал ничего плохого, проблема здесь заключалась в том, что Docker CE официально не поддерживается в Red Hat Enterprise Linux (RHEL) 8 или CentOS 8. Я должен был упомянуть, что я развертывал контейнеры на CentOS 8, в любом случае, ниже вы можете найти решение.

https://serverfault.com/questions/987686/no-network-connectivity-to-from-docker-ce-container-on-centos-8