From 71dc3f2da8e7d82df26769a84e6d8046b5f549f3 Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Wed, 9 Sep 2026 00:30:50 +0300 Subject: [PATCH] Document reaching a proxy that lives in another container MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A proxy published as 127.0.0.1:1080 is reachable from the host and nowhere else — not via host.docker.internal either, since loopback publishing never leaves the host. The fix is a shared docker network and addressing the proxy by container name, so deploy/ now carries a ready compose.override.yml example for exactly that, parameterised by PROXY_NETWORK. compose.override.yml is gitignored so a local deployment tweak cannot collide with future pulls, the way the domain edit did. Co-Authored-By: Claude Opus 5 --- .gitignore | 1 + README.md | 13 +++++++++++++ deploy/compose.proxy.yml.example | 27 +++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 deploy/compose.proxy.yml.example diff --git a/.gitignore b/.gitignore index 49355f0..9a99448 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ web/node_modules/ *.log data/ *.tsbuildinfo +compose.override.yml diff --git a/README.md b/README.md index f50112d..26b8a1a 100644 --- a/README.md +++ b/README.md @@ -244,6 +244,19 @@ YTDLP_PROXY=socks5h://127.0.0.1:1080 - **`127.0.0.1` внутри контейнера — это сам контейнер.** Если Psiphon или ваш SOCKS запущен на хосте, укажите `socks5h://host.docker.internal:1080` (эта запись в `extra_hosts` уже есть). Бот проверяет прокси при старте и пишет в лог понятную причину, если тот недоступен. +- **Прокси в соседнем контейнере — подключайтесь по имени, а не через хост.** Если прокси + запущен в другом compose-проекте и публикует порт как `127.0.0.1:1080`, из контейнера бота он + недоступен вообще: публикация на loopback видна только самому хосту. Заведите общую сеть — + готовый пример в [deploy/compose.proxy.yml.example](deploy/compose.proxy.yml.example): + + ```bash + docker network ls | grep psiphon + cp deploy/compose.proxy.yml.example compose.override.yml + ``` + + затем в `.env` — `YTDLP_PROXY=socks5h://psiphon:1080` (имя контейнера прокси) и, если сеть + называется иначе, `PROXY_NETWORK=<имя>`. Файл `compose.override.yml` в `.gitignore`, так что + обновления с ним не конфликтуют. - **Прокси должен слушать интерфейс, видимый контейнеру.** Даже с `host.docker.internal` соединение упрётся в `ECONNREFUSED`, если клиент забинден только на loopback. Проверить: diff --git a/deploy/compose.proxy.yml.example b/deploy/compose.proxy.yml.example new file mode 100644 index 0000000..69219b8 --- /dev/null +++ b/deploy/compose.proxy.yml.example @@ -0,0 +1,27 @@ +# Подключение бота к сети контейнера с прокси (Psiphon и т.п.). +# +# Нужно, когда прокси живёт в другом compose-проекте и публикует порт только на +# loopback хоста (127.0.0.1:1080) — из других контейнеров такой порт не виден. +# В общей docker-сети контейнеры обращаются друг к другу по имени, минуя хост. +# +# Установка: +# 1. Узнайте имя сети прокси: docker network ls | grep psiphon +# 2. Скопируйте этот файл: cp deploy/compose.proxy.yml.example compose.override.yml +# 3. При необходимости укажите в .env другое имя сети: +# PROXY_NETWORK=psiphon_default +# 4. В .env пропишите адрес по имени контейнера: +# YTDLP_PROXY=socks5h://psiphon:1080 +# 5. docker compose up -d +# +# compose.override.yml подхватывается автоматически и лежит в .gitignore, +# поэтому обновления репозитория с ним не конфликтуют. +services: + mbot: + networks: + - default + - proxy + +networks: + proxy: + external: true + name: ${PROXY_NETWORK:-psiphon_default}