Как заставить 2 контейнера с сервером sql и приложением dotnet общаться друг с другом? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть следующий макет проекта в конвейере Azure DevOps.

На размещенном агенте Ubuntu:

(a) Контейнер «A» запускает сервер mssql внутри контейнера докера (mcr.microsoft.com/mssql/server), контейнер открывает демон 1433 для порта

(b) Контейнер «B» содержит все файлы репо, в которых создавалось основное приложение dotnet. Этот контейнер также содержит файлы миграции базы данных (файлы .cs).

Контейнер B запускается командой run, а точка входа запускает 2 сценария в следующем порядке:

1) Управляет созданием и миграцией базы данных. 2) Запускает проект: внутренний API, который связывается с базой данных

Проект dotnet связывается через эту ConnectionString с базой данных:

"Database": "Server=localhost,1433; Database=MyAwesomeDatabase; User=sa; Password=MyAwesomePassword; MultipleActiveResultSets=True;"

На этом втором шаге контейнер B предоставляет порт 55111 для запуска тестов по API.

В конвейере есть и другие действия, но они актуальны для моей проблемы.
Как я могу правильно связать эти 2 контейнера, чтобы миграция базы данных выполнялась в контейнере A, и API в контейнере B связывался с ним?

1 Ответ

1 голос
/ 09 мая 2019

Дайте вашим контейнерам осмысленное имя (или используйте службы, которые их автоматически называют), поместите их в одну и ту же сеть Docker (наложение или мост, в зависимости от вашей ситуации) и используйте имя контейнера в качестве имени хоста.

Так что, если ваш контейнер БД называется "mydb", то строка подключения будет иметь вид:

"Database": "Server=mydb,1433; Database=MyAwesomeDatabase; User=sa; Password=MyAwesomePassword; MultipleActiveResultSets=True;"

...