Можно ли настроить Docker и прокси таким образом, чтобы отправлять запросы с помощью cURL между контейнерами?

Как настроить запрос через curl между двумя проектами, запущенными с использованием docker-compose на сервере, который имеет доступ в интернет через прокси?
  • 21 мая 2024 г. 8:10
Ответы на вопрос 2
Да, можно настроить Docker и прокси таким образом, чтобы отправлять запросы с помощью cURL между контейнерами.

Для того чтобы настроить запрос через cURL между двумя проектами, запущенными с использованием docker-compose на сервере с доступом в интернет через прокси, необходимо выполнить следующие шаги:

1. Создать файл с настройками прокси для Docker:

```bash
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://<proxy_ip>:<proxy_port>"
Environment="HTTPS_PROXY=https://<proxy_ip>:<proxy_port>"
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
```

2. Добавить настройки прокси в конфигурацию cURL внутри контейнеров:

В Dockerfile каждого контейнера, где будет использоваться cURL, добавить следующие строки:

```dockerfile
ENV HTTP_PROXY=http://<proxy_ip>:<proxy_port>
ENV HTTPS_PROXY=https://<proxy_ip>:<proxy_port>
```

3. Запустить проекты с использованием docker-compose:

```bash
docker-compose up -d
```

4. Теперь запросы между контейнерами можно отправлять с помощью cURL, используя настройки прокси. Например, чтобы отправить запрос от одного контейнера к другому, можно использовать следующую команду:

```bash
docker-compose exec <source_container> curl <target_container>:<port>
```

Где `<source_container>` - название контейнера, откуда отправляется запрос, `<target_container>` - название контейнера, куда отправляется запрос, `<port>` - порт, на котором запущен сервер в целевом контейнере.

Таким образом, настроив Docker и прокси, можно успешно отправлять запросы с помощью cURL между контейнерами, запущенными с использованием docker-compose на сервере с доступом в интернет через прокси.
Часто эту задачу решают через external network. 

Создаеш еще одну сеть через CLI
docker create network net-private --internal

Потом добавляеш ее в docker-compose.yml как внешнюю, потом в томже компопозе добавляеш ее к сервису которые должны между собой взаимодействовать.

После всех манипуляций контейнеры будут видеть друг-друга по именам.

Вот пример двух композов, приложение с базой и pgadmin. Pgadmin это вебка для управления базой, что бы они могли взаимодействовать мы объединяем их в одну сеть net-private.
version: '3.8'

services:
  pgadmin:
    image: dpage/pgadmin4
    restart: unless-stopped
    environment:
      PGADMIN_DEFAULT_EMAIL: "[email protected]"  # замініть на свою email-адресу
      PGADMIN_DEFAULT_PASSWORD: "qwerty12345"  # замініть на свій пароль
    ports:
      - "5050:80"
    networks:
      - net-private

networks:
  net-private:
    external: true


version: '3.8'

services:
  web:
    image: my/app
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
        - ./data:/mnt/data
  database:
    image: db/psql
    restart: unless-stopped
    networks:
      - net-private


networks:
   net-private:
    external: true
Похожие вопросы