Как выставить порт из Docker Swarm, не прерывая поиск DNS? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть веб-сервис, работающий как приложение Spring Boot внутри контейнера Docker.Веб-сервис обращается к внешней базе данных Cassandra.Веб-сервис открывается из контейнера Docker путем публикации его HTTP-порта (8081).Образы контейнеров создаются с использованием 'openjdk: 8-jre-alpine' в качестве основы, и единственными дополнительными изменениями являются JAR приложения и монтирование для файла конфигурации.Docker установлен на виртуальной машине Ubuntu, работающей в Azure.

Это прекрасно работает как обычный старый контейнер, но когда я запускаю его как часть Docker, роем поиск DNS, чтобы обнаружить ошибку базы данных Cassandra.

У меня нет опыта работы с ops, и работа с сетью никогда не была моей сильной стороной, но я выяснил, что Docker изменяет файл /etc/resolv.conf, когда я выставляю порт из контейнера, запущенного врой, и это нарушает поиск DNS.

Вот некоторый код, объясняющий немного больше о моей настройке.

Dockerfile (упрощенный для безопасности):

FROM openjdk:8-jre-alpine
WORKDIR /service
COPY ./target/application.jar /service
VOLUME /service/config
CMD java -jar application.jar --spring.config.name=message-processor

Запуск простого контейнера:

docker container run -d --restart=unless-stopped --name message-processor --publish 8081:8081 -v /config/jenkins:/service/config -e SPRING_PROFILES_ACTIVE=jenkins -e SPRING_CONFIG_NAME=message-processor message-processor:jenkins

Запуск службы Swarm:

docker service create --replicas 2 --name message-processor --publish 8081:8081 --mount type=bind,source=/config/jenkins,target=/service/config -e SPRING_PROFILES_ACTIVE=jenkins -e SPRING_CONFIG_NAME=message-processor message-processor:jenkins

Я не буду публиковать содержимое относительного '/etc/resolve.conf', потому что оно содержит различные IP-адреса и доменные имена.В рабочем контейнере значение 'nameserver' такое же, как и у хоста.В контейнерах Swam, где DNS не работает, 'nameserver' установлен на 127.0.0.11.

Я могу заставить DNS работать в контейнерах Swarm, если я вручную изменю /etc/resolve.conf, ноэто не похоже на то, что нужно делать.

Я начал исследовать и экспериментировать с сетями Docker, но он идет медленно, и я не чувствую, что добился большого прогресса.

...