Не удается выполнить пинг / получить доступ к хосту docker на 172.17.0.1 изнутри контейнера

Обычно это происходит из-за того, что iptables на хосте блокирует доступ из сетей docker. Вы можете посмотреть на iptables -S или iptables -nvL чтобы ознакомиться с вашими текущими правилами.


Тем не менее, если вы все-таки откроете docker API, вам нужно быть осторожным с тем, кто может получить доступ к этому API. Использование порта 2375 обычно означает, что вы не настроили mTLS, см. руководство docker по настройке mTLS. Это означает, что любой, у кого есть доступ к порту, может отправлять вызовы API, что означает, что непривилегированный локальный пользователь или любой другой контейнер имеет возможность получить root на вашем хосте. В вашем случае это так же просто, как:

docker -H tcp://172.17.0.1:2375 run -it --rm --privileged --pid host debian nsenter -t 1 -m -u -n -i bash

Рекомендуемое решение состоит в том, чтобы либо использовать DinD для запуска docker engine внутри контейнера, либо предоставить общий доступ к сокету docker в качестве монтирования файла / тома с соответствующим доступом UID /GID к файлу. Это гарантирует, что только этот контейнер имеет доступ к движку docker, а не ко всем пользователям и любому контейнеру, запущенному на хосте. Чтобы справиться с проблемами доступа к UID / GID с файлами, смонтированными в томе, я сделал это специально для изображений Дженкинса в моем дженкинс-докер репо, и в моем есть более общее решение скрипт fix-perms в моем репозитории docker-base.