Как ссылаться на контейнер Docker в ConnectionString - PullRequest
1 голос
/ 29 января 2020

У меня есть 2 docker изображений, один для моего бэкэнда и один для фиктивной базы данных. Я хочу раскрутить эти два изображения отдельно и связать серверную часть с базой данных. Для этого в моем бэкэнде есть строка подключения, например Data Source=192.168.99.100;Catalog=DB name;Integrated Security=True;MultipleActiveResultSets=True";, где 192.168.99.100 - это IP-адрес моего компьютера по умолчанию Docker, на котором работает контейнер базы данных. Так что на моей машине Windows это работает отлично, и внутренний контейнер может связываться с базой данных, которая работает в другом контейнере. Однако, когда некоторые из моих коллег, использующих Ma c и Linux, используют одни и те же изображения, они не могут заставить работать ссылку, потому что у них явно нет одинакового IP для их Docker машины.

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

Ответы [ 2 ]

2 голосов
/ 29 января 2020

Вы также можете сделать это, используя обычный docker. В основном вам просто нужно создать мостовую сеть, а затем присоединить к ней оба контейнера.

Например:

docker network create --driver=bridge mynetwork
docker run --network=mynetwork --name mydb mydb:latest
docker run --network=mynetwork --name myapp myapp:latest

Затем внутри контейнера myapp вы можете ссылаться на контейнер базы данных, используя имя хоста mydb (аналогично docker -compose). Вы по-прежнему можете открывать порты в контейнере myapp для своего хоста, используя -p 3000:3000, et c

Дополнительная информация: https://docs.docker.com/network/bridge/

0 голосов
/ 29 января 2020

Вы можете использовать услуги docker-compose для достижения того, что вы ищете. Вот упрощенный пример файла docker -compose.yml:

version: "3.5"
services:
  db:
    container_name: mock_db
    restart: "no"
    build: ./mock_db
    expose:
      - 5432 (or whatever your port is)
    env_file: .env
    command: your-command

  server:
    container_name: my_server
    build: ./server
    env_file: .env
    ports:
      - "8443:8443"
    command: your-command

Затем вы можете ссылаться на имя службы (в данном случае db) как часть ip / url вашей строки подключения.

Подробнее о docker-compose опциях конфигурации можно прочитать здесь

...