maccree
@maccree
freelance backend developer

Как из docker контейнера стучаться в другие сети?

Здравстуйте!
Есть некий контейнер:
ersion: "3"

services:

  web:
    volumes:
      - ./web:/app
    env_file:
      - ./web/.env
    build: ./web
    ports:
      - '8000:8000'

Так же на стороннем сервре, но в той же локальной сети есть развернутый PSQL, как мне из контейнера постучаться в локальную сеть?
  • Вопрос задан
  • 408 просмотров
Пригласить эксперта
Ответы на вопрос 2
@mxelgin
Чтобы из Docker-контейнера обращаться к другим сетям или сервисам, нужно учесть несколько моментов. Вот основные шаги и рекомендации:

1. Подключение к внешним сетям
Если вы хотите, чтобы ваш контейнер мог обращаться к внешним сетям (например, к другим контейнерам, которые находятся в разных сетях), убедитесь, что:

Контейнер находится в той же сети, что и целевые сервисы.

2. Создание сети в Docker Compose
Можно создать пользовательскую сеть в docker-compose.yml, чтобы контейнеры могли видеть друг друга:
version: '3'

services:
  web:
    volumes:
      - ./web:/app
    env_file:
      - ./web/.env
    build: ./web
    ports:
      - '8000:8000'
    networks:
      - my_network

  other_service:
    image: some_image
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

3. Обращение к сервисам
Внутри контейнера вы можете обращаться к другим контейнерам по имени сервиса, указанному в docker-compose.yml. Например, если у вас есть другой сервис с именем other_service, вы можете обращаться к нему по адресу http://other_service:port.
4. Обращение к внешним ресурсам
Если вы хотите обращаться к ресурсам вне Docker (например, к API или к базе данных на внешнем сервере), просто используйте их IP-адрес или доменное имя. Например:

environment:
  - API_URL=http://external.api.com

5. Проверка сетевых настроек
Если возникают проблемы с соединением, проверьте следующее:

Убедитесь, что у контейнера есть доступ к интернету.
Проверьте настройки брандмауэра на хосте.
Убедитесь, что целевые сервисы доступны из контейнера.
Пример
Вот пример docker-compose.yml, который включает подключение к сети и другой сервис:

version: '3'

services:
  web:
    volumes:
      - ./web:/app
    env_file:
      - ./web/.env
    build: ./web
    ports:
      - '8000:8000'
    networks:
      - my_network

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

В этом примере контейнер web может подключаться к контейнеру db по адресу db:3306.
Ответ написан
Комментировать
@s1dney
Если на удаленном сервере контейнер слушает порт глобально, а не на локалхосте и этот порт просто открыт в фаерволле (iptables/ipfw)
То удаленный PSQL должен быть доступен по адресу psql:адрес_удаленныго_сервера:5432 без каких-то вмешательств в конфиг
ровно так же, как изнутри контейнера есть доступ в сеть интернет, а в текущем конфиге веб-приложение должно быть доступно по хттп://локальный_адрес_сервера:8000
потому что
ports:
      - '8000:8000'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы