#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, в любом случае, ниже вы можете найти решение.