Сводка
Имея файл docker-compose.yml
, который создает образ, подобный следующему:
services:
my-service:
build:
context: My.VS.AppFolder
networks:
- my-docker
networks:
my-docker:
external: true
указанная сеть доступна только в ENTRYPOINT
.Но не во время сборки.Как получить доступ к другому контейнеру в той же сети my-docker
во время сборки Dockerfile
?
Вариант использования: выборка пакетов NuGet из частного репозитория
Описание варианта использования
У меня есть веб-приложение ASP.NET Core MVC 2.1.Для лучшего разделения проблем я хочу реализовать определенные функции в другом отдельном веб-приложении (например, в интерфейсе администратора).Чтобы избежать копирования общих вещей, таких как макет приложения (Razor) или некоторые вспомогательные служебные классы, я создал общий проект для этих вещей.
Итак, сейчас есть три проекта:
- MyApp (Исходное приложение)
- MyApp.Core (Для общих вещей)
- MyApp.Admin
Поскольку на MyApp.Core нужно ссылаться из других проектов, я установил BaGet как простой NuGetхостинг репо для моей среды сборки докеров.На этот контейнер есть внутренняя ссылка с его DNS-именем в nuget.config
, созданная на уровне решения MyApp
(то же самое для нового MyApp.Admin
, но для простоты давайте сосредоточимся на MyApp
).
Проблемы
В Dockerfile
из MyApp
Я делаю сейчас это:
RUN dotnet restore --configfile nuget.config
и мне нужен доступ к имени DNS под названием baget
в сети my-docker
. Исследования показывают, что это возможно только по крайней мере с версией 3.4 docker-compose
, и, кажется, до сих пор официально не задокументировано.Но Docker удалил несколько опций из v2 в v3 , например, ограничения ресурсов, такие как mem_limits
, который я использую.Начиная с версии 3, они доступны только с использованием роя, а не на отдельных узлах.
Таким образом, в настоящее время я не вижу никакого решения, кроме перехода на v3 и Swarm, которое могло бы вызвать дополнительную работу и сложность без других преимуществ, кроме этой проблемы с сетью.Мой проект не настолько большой, что требуется рой.