# Настройка Docker для работы с локальным прокси-сервером


## Проблема

Я использую Synology NAS как файловый сервер, а также для запуска виртуального сервера. В моей сети настроен ограниченный доступ в глобальную сеть, и полноценный доступ в интернет осуществляется только через прокси-сервер, который также работает на этом же NAS.

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

**Суть проблемы:** Docker-контейнер не может напрямую обратиться к сервисам, работающим на localhost хост-машины. Если бы прокси был внешним, то подключиться к нему из контейнера было бы просто, но в случае локального прокси требуются дополнительные настройки.

## Решение

Для решения этой проблемы можно использовать специальную директиву `extra_hosts` в Docker Compose, которая позволяет добавить записи в файл `/etc/hosts` внутри контейнера:

1. В файл `compose.yaml` добавьте следующую секцию:

```yaml
extra_hosts:
  - "host.docker.internal:host-gateway"
```

Что это делает:
* `host.docker.internal` — специальное доменное имя, которое будет доступно внутри контейнера
* `host-gateway` — специальное значение, которое Docker автоматически заменит на IP-адрес хост-системы

## Практическое применение

После добавления этой настройки, вы сможете обращаться к любым сервисам, запущенным на хост-машине, используя доменное имя `host.docker.internal` вместо `localhost`.

Например, для настройки SOCKS5 прокси в FreshRSS добавьте в конфигурационный файл следующие строки:

```php
'curl_options' => array (
  CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5,
  CURLOPT_PROXY => 'host.docker.internal',
  CURLOPT_PROXYPORT => 8080,
),
```

## Дополнительные примечания

* Этот метод работает не только для прокси-серверов, но и для любых других сервисов, запущенных на хост-машине: баз данных, кэширующих сервисов и т.д.
* На различных версиях Docker механизм может немного отличаться, поэтому убедитесь, что вы используете последнюю версию Docker и Docker Compose.
* Для Windows и macOS Docker Desktop уже добавляет запись `host.docker.internal` по умолчанию, но для Linux требуется явное указание, как в примере выше.
