Получение сброса соединения при доступе к работающему контейнеру docker - PullRequest
0 голосов
/ 17 июня 2020

У меня на сервере есть контейнер. До вчерашнего дня все работало нормально, затем кто-то удалил маршруты docker на хосте. Приложение работает внутри контейнера и прослушивает 0.0.0.0:5000, оно отображается на 5001. Запуск curl -v localhost:5001 дает

* Rebuilt URL to: localhost:5001/
*   Trying ::1...
* Connected to localhost (::1) port 5001 (#0)
> GET / HTTP/1.1
> Host: localhost:5001
> User-Agent: curl/7.47.0
> Accept: */*
>
* Recv failure: Connection reset by peer
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer

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

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

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Сброс iptables до значений по умолчанию (обратите внимание, что это удалит все существующие правила, цепочки и установит политики на ПРИНЯТЬ, если у вас есть другие правила, отличные от docker по умолчанию, или внесены какие-либо изменения, убедитесь, что вы сделали резервную копию перед этим)

  1. остановка docker служба: sudo systemctl stop docker

  2. сброс iptables до значений по умолчанию:

iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
начало docker: systemctl start docker
0 голосов
/ 22 июня 2020

Мне наконец удалось заставить все работать.

  1. Изменены настройки docker su bnet, потому что подсети, созданные docker -compose, каким-то образом мешали publi * хоста 1036 * интерфейс. Добавлен приведенный ниже код в /etc/docker/daemon.json

    {"dns": ["20.10.1.222"], "default-address-pools": [{"base": "20.10. 0,0 / 16 "," size ": 24}]}

  2. Перезапустить docker сервис

  3. Принудительно docker использовать значение по умолчанию мостовая сеть. В docker -compose.yaml

    network_mode: bridge

  4. Вниз контейнеров, созданных с помощью compose, затем повторно поднимите

  5. Удалены все сети, созданные командой compose

    docker network rm

Примечание: из моего вопроса, docker маршруты были удалены, потому что каким-то образом они делали хост недоступным на перезагрузка. Изменение docker подсетей и удаление всех остальных сетей, кроме сети по умолчанию, решило эту проблему.

docker network ls 



NETWORK ID          NAME                DRIVER              SCOPE
15d807ad77d4        bridge              bridge              local
6cd415046a23        host                host                local
6e9b8dfc500e        none                null                local
...