Docker

загрузка образов (демон) и сетевой доступ внутри контейнеров (процессы контейнера) — разные вещи, они настраиваются отдельно.

1. docker pull через прокси (демон)

Docker Desktop (macOS / Windows): Settings → Resources → Proxies, выберите Manual и укажите:

  • Web Server (HTTP): http://127.0.0.1:7898
  • Secure Web Server (HTTPS): http://127.0.0.1:7898

В некоторых версиях Docker Desktop соединение с прокси начинается внутри ВМ, где 127.0.0.1 — это сама ВМ. Если не работает, укажите http://host.docker.internal:7898 и включите общий прокси в клиенте.

Нативный Docker в Linux (dockerd работает на хосте):

bash
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/proxy.conf <<'EOF'
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7898"
Environment="HTTPS_PROXY=http://127.0.0.1:7898"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker

2. Программы внутри контейнеров через прокси

Внутри контейнера 127.0.0.1 — это сам контейнер, а не хост.

  • Docker Desktop: контейнеры обращаются к хосту как host.docker.internal:
bash
docker run --rm -e HTTPS_PROXY=http://host.docker.internal:7898 alpine wget -qO- https://github.com
  • Нативный Docker в Linux: сначала включите в клиенте общий прокси, разрешите диапазон Docker (например 172.17.0.0/16) и создайте учётные данные для контейнера:
bash
cnb share on --cidr 172.17.0.0/16
cnb share credential create docker-dev   # пароль показывается только один раз
docker run --rm -e HTTPS_PROXY=http://docker-dev:<пароль>@172.17.0.1:<порт> alpine wget -qO- https://github.com

Адрес и порт общего прокси — те, что выводит cnb share status.

3. При сборке образов

bash
docker build --build-arg HTTPS_PROXY=http://host.docker.internal:7898 .

Не записывайте адрес прокси и пароль в ENV в Dockerfile — иначе они останутся в слоях образа.