Невозможно получить доступ к контейнеру Docker через открытый порт из любого места, даже из localhost - PullRequest
0 голосов
/ 12 мая 2018

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

Эта проблема характерна как для моей рабочей станции Fedora27, так и для Ubuntu Server 16.04 LTS

Я успешно установил Docker, и некоторые контейнеры работают, но другие не могут быть доступны по 0.0.0.0: или локальному IP:

Я отключил брандмауэр и сбросил iptables, среди прочего я пытаюсь запустить сервер minecraft на 25565, следуя этой инструкции:

Чтобы просто использовать последнюю стабильную версию, запустите

docker run -d -p 25565:25565 --name mc itzg/minecraft-server

где стандартный сервер порт 25565 будет доступен на вашем хост-компьютере.

Контейнер работает нормально:

[benjbt@localhost ~]$ sudo docker ps
CONTAINER ID  IMAGE                           COMMAND       CREATED        STATUS                  PORTS                                NAMES
3240121d414e  itzg/minecraft-server:latest    "/start"      2 minutes ago  Up 2 minutes (healthy)  0.0.0.0:25565->25565/tcp, 25575/tcp  mc
8f1cf88207e7  portainer/portainer             "/portainer"  9 minutes ago  Up 9 minutes            0.0.0.0:9000->9000/tcp               eager_northcutt

Однако порт недоступен:

can’t establish a connection to the server at 0.0.0.0:25565

Пожалуйста, помогите мне понять, что блокирует мой порт?

[benjbt@localhost ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
DOCKER-ISOLATION  all  --  anywhere             anywhere            
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate 
RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp 
dpt:cslistener
ACCEPT     tcp  --  anywhere             172.17.0.3           tcp 
dpt:25565

Chain DOCKER-ISOLATION (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere  

УСТРАНЕНИЕ НЕИСПРАВНОСТЕЙ: Ответы на комментарий @BMitch

  1. Контейнер кажется здоровым

    CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS              PORTS                                                NAMES
    

    6b5822a781c1 rlenferink / minecraft: последнее "/ начало" 38 часов назад Up 38 часов 0.0.0.0:25565->25565/tcp, 0.0.0.0:25565->25565/udp mc 8f592bb99d8e portainer / portainer "/ portainer" 8 дней назад Up 45 часов 0.0.0.0:9000->9000/tcp практическая_столстовка

    root @ server: ~ # docker logs mc [08:55:19] [Тема сервера / INFO]: запуск версии сервера Minecraft 1.12.2 [08:55:19] [Тема сервера / INFO]: загрузка свойств [08:55:19] [Тема на сервере / INFO]: Тип игры по умолчанию: ВЫЖИВАНИЕ [08:55:19] [Поток сервера / INFO]: создание пары ключей [08:55:19] [Тема сервера / INFO]: запуск сервера Minecraft на *: 25565 [08:55:19] [Тема сервера / INFO]: Использование типа канала epoll [08:55:19] [Тема сервера / INFO]: подготовка уровня "мир" [08:55:20] [Тема сервера / INFO]: загружено 488 улучшений [08:55:20] [Поток сервера / INFO]: подготовка начальной области для уровня 0 [08:55:21] [Тема сервера / INFO]: Подготовка зоны появления: 2% [08:55:22] [Тема сервера / INFO]: Подготовка области появления: 18% [08:55:23] [Тема сервера / ИНФОРМАЦИЯ]: Подготовка зоны появления: 74% [08:55:23] [Тема сервера / INFO]: Готово (3.947с)! Для получения справки введите «помощь» или «?» root @ server: ~ # Контейнер Docker проверяет mc [ { «Id»: «6b5822a781c147012e1aa279320ce1cb235193a11da2e8a640848ce252c56027», «Создано»: «2018-05-13T08: 55: 08.363756829Z», «Путь»: «/ начало», "Арги": [], "Государственный": { «Статус»: «работает», «Бег»: правда, «Приостановлено»: ложно, «Перезапуск»: ложь, "OOMKilled": ложь, «Мертвый»: ложный, «Пид»: 15719, «ExitCode»: 0, "Ошибка": "", "StartedAt": "2018-05-13T08: 55: 10.734864313Z", "FinishedAt": "0001-01-01T00: 00: 00Z" }, "Изображение": "sha256: 648452c4d7be732fc87d5bcb393e94cacd8a22fc7fbb3f98bfb655aaa9f0d400", "ResolvConfPath": "/var/lib/docker/containers/6b5822a781c147012e1aa279320ce1cb235193a11da2e8a640848ce252c56027/resolv.conf", "HostnamePath": "/ var / lib / docker / container / 6b5822a781c147012e1aa279320ce1cb235193a11da2e8a640848ce252c56027 / hostname", "HostsPath": "/ var / lib / docker / container / 6b5822a781c147012e1aa279320ce1cb235193a11da2e8a640848ce252c56027 / hosts", "LogPath": "/var/lib/docker/containers/6b5822a781c147012e1aa279320ce1cb235193a11da2e8a640848ce252c56027/6b5822a781c147012e1aa279320ce1cb23527e2404060606608a5608605605 «Имя»: «/ mc», «RestartCount»: 0, «Драйвер»: «оверлей2», «Платформа»: «Linux», "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "docker-default", «ExecIDs»: ноль, "HostConfig": { «Связывает»: [ "/ Шоссе / Minecraft: / данные" ], "ContainerIDFile": "", "LogConfig": { "Тип": "JSON-файл","Конфиг": {} }, "NetworkMode": "мост", "PortBindings": { "25565 / tcp": [ { "HostIp": "", "HostPort": "25565" } ], "25565 / UDP": [ { "HostIp": "", "HostPort": "25565" } ] }, "RestartPolicy": { «Имя»: «нет», "MaximumRetryCount": 0 }, «Автоудаление»: ложь, "VolumeDriver": "", "VolumesFrom": ноль, "CapAdd": ноль, "CapDrop": ноль, "Днс": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": ноль, "GroupAdd": ноль, "IpcMode": "разделяемый", "Cgroup": "", «Ссылки»: ноль, "OomScoreAdj": 0, "PidMode": "", "Привилегированный": ложь, "PublishAllPorts": ложь, "ReadonlyRootfs": ложь, "SecurityOpt": ноль, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "ConsoleSize": [ 0, 0 ], "Изоляция": "", "CPUShares": 0, «Память»: 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": [], "BlkioDeviceReadBps": ноль, "BlkioDeviceWriteBps": ноль, "BlkioDeviceReadIOps": ноль, "BlkioDeviceWriteIOps": ноль, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", «Устройства»: [], "DeviceCgroupRules": ноль, «DiskQuota»: 0, "KernelMemory": 0, «MemoryReservation»: 0, "MemorySwap": 0, "MemorySwappiness": ноль, "OomKillDisable": ложь, «ПидсЛимит»: 0, "Ulimits": ноль, "CpuCount": 0, "CpuPercent": 0, «IOMaximumIOps»: 0, «IOMaximumBandwidth»: 0 }, "GraphDriver": { "Данные": { "LowerDir": «/ Var / Библиотека / Докер / overlay2 / 4f5f630442b65a59c7f174a8aad1dc356cb6f565e76b2ca4afa49132afbaf30d-INIT / Diff: / Var / Библиотека / Докер / overlay2 / a93b9c08d02aa86d8a53f5a32f166c8b40932f1430d4f9e3fd4e9c9e96af6557 / Diff: / Var / Библиотека / Докер / overlay2 / 21b66b86842fd4c456df6ea2493edbabcd0df49f468100c9c2d7d2ef55711501 / Diff: / Var / Библиотека / докер / overlay2 / e10484efe17398912f63644cff926875cd10fa8169d1ef2f1164d1000ccd7b06 / Diff: / Var / Библиотека / докер / overlay2 / 9b110a14a5fd9640fd95161c1fa35ec8cb98b4fb55a7caf70231b1b8ba238559 / Diff: / Var / Библиотека / докер / overlay2 / a1cb33255806e73a1d7f9efd49c2bfcbb6edf190ed1976889cb10d3f81682c9f / Diff: / Var / Библиотека / докер / overlay2 / 67286cfad81daababf3bac63ff9684c9567cd877e1e2ce4888d59257da4a06ca / Diff: / вар / Библиотека / докер / overlay2 / 6904d0950327c52355e8b34b16d822b4eddf817de272f965f6fc6ad31089227d / Diff: / Var / Библиотека / докер / overlay2 / f6b782d3f37da3bf2c36ed70f6302d282ca4c80d39b3de3933b14902d149cfec / Diff: / Var / Библиотека / докер / overlay2 / e4eac39fc7fade8117216f45e9fe85bb42537714c19c02c70aab4ed62fad474e / Diff: / Var / Библиотека / докер / overlay2 / 227df18 48d1a3038188689c1f343ad42758bc6be9872ca8dda843a13b0bbf93e / дифф», "MergedDir": "/ var / lib / docker / overlay2 / 4f5f630442b65a59c7f174a8aad1dc356cb6f565e76b2ca4afa49132afbaf30d / merged", "UpperDir": "/ var / lib / docker / overlay2 / 4f5f630442b65a59c7f174a8aad1dc356cb6f565e76b2ca4afa49132afbaf30d / diff", "WorkDir": "/ var / lib / docker / overlay2 / 4f5f630442b65a59c7f174a8aad1dc356cb6f565e76b2ca4afa49132afbaf30d / work" }, "Имя": "оверлей2" }, "Крепления": [ {"Type": "bind", "Source": "/ mnt / minecraft", "Destination": "/ data", "Mode": "", "RW": true, "Propagation": "rprivate"}], "Config": {"Hostname": "34cb1418fb23", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts":{"25565 / tcp": {}, "25565 / udp": {}}, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": ["PATH = / usr / local/ sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin "," DEBIAN_FRONTEND = noninteractive "]," Cmd ": [" / start "]," Image ":"rlenferink / minecraft: latest "," Volumes ": {" / data ": {}}," WorkingDir ":" "," Entrypoint ": null," OnBuild ": null," Labels ": {}}," NetworkSettings«: { "мост": "", "SandboxID": "e2c693daed0be5a204a83d408262a0fe01b66bdd99ddbb3a53229f5a58d5202c", "HairpinMode": ложные "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Порты": { "25565 / TCP": [{"HostIp": "0.0.0.0", "HostPort": "25565"}], "25565 / udp": [{"HostIp": "0.0.0.0", "HostPort": "25565"}]}, "SandboxKey ":" / var / run/ docker / netns / e2c693daed0b "," SecondaryIPAddresses ": null," SecondaryIPv6Addresses ": null," EndpointID ":" 819a8255b8ed4d79366a6d6ff4442a441f61d89bdfacc0c193ed2: 2LIP "0x1.0", "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02: 42: ac: 11: 00: 03", "Networks": {"bridge": { "IPAMConfig": {}, "Ссылки": нулевой, "Псевдонимы": нулевой, "NETWORKID": "e2ff1284a59794e19dd4dc39b17713ad11e0db3e698735014579405355f516ec", "EndpointID": "819a8255b8ed4d79366a6d6ff4442a441f61d89bdfacc0c193ed2f9340024696", "Шлюз": "172.17.0.1", "IP-адрес": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02: 42: ac: 11: 00: 03", "DriverOpts": null}}}}]

  2. Netshoot

    Активные подключения к Интернету (только серверы) Proto Recv-Q Send-Q Локальный адрес Состояние внешнего адреса
    tcp 0 0 ::: 25565 ::: * LISTEN

  3. root@server:~# echo $DOCKER_HOST
    

    root @ server: ~ #

  4. На локальном компьютере

    $ curl http://127.0.0.1:25565 curl: (52) Пустой ответ от сервера

  5. Локальный компьютер в Firefox

    Проблема при загрузке страницы в ... 0.0.0.0:25565 127.0.0.1:25565 localhost: 25565 192.168.15.22:25565

1 Ответ

0 голосов
/ 14 мая 2018

Несколько вещей для проверки:

  1. Убедитесь, что ваше приложение работоспособно.Проверьте docker logs mc на наличие сообщений об ошибках и docker container inspect mc на время последнего выхода / перезапуска контейнера.

  2. Убедитесь, что приложение прослушивает нужный порт.Для этого мне нравится netshoot:

    docker run -it --rm --net container:mc nicolaka/netshoot netstat -lnt

    Это должно показать выход с вашим портом, прослушиванием 0.0.0.0:25565.

  3. Проверьте, есливы запускаете команды Docker локально или на удаленном экземпляре или виртуальной машине.echo $DOCKER_HOST и, если оно имеет значение, подключитесь к этому IP-адресу вместо 127.0.0.1.

  4. Если вы вошли на удаленный компьютер для запуска команд докера (например, ssh),сначала проверьте локально на этом компьютере (например, curl http://127.0.0.1:25565), прежде чем пытаться получить к нему удаленный доступ, где брандмауэры могут заблокировать подключение.

  5. Наконец, как упоминалось в комментариях, не подключайтесь к0.0.0.0 от клиента.По сути, это универсальный IP-адрес, который сообщает серверному приложению прослушивать все сетевые интерфейсы.Вы не подключаетесь к этому через ваш клиент / веб-браузер.Вместо этого используйте фактический IP-адрес или DNS-имя хоста.

...