Здравствуйте, я пытаюсь связать свои контейнеры следующие данного руководства:Docker ссылка контейнер - переменные окружения не отображается
https://docs.docker.com/userguide/dockerlinks/
я бегу docker run -d --name mongodb devops-mongodb
Тогда я бегу docker run -d -P --name rest-api --link mongodb devops-rest-api
Чтобы связать мой контейнер mongodb в контейнер rest-api.
Тогда документация сказал мне, чтобы сделать это, чтобы просмотреть переменные окружения:
docker run --rm --name rest-api2 --link db:db devops-rest-api env
Однако, она не выводит из переменных окружения, как показано в документации.
Я просто получаю STDOUT из приложения Spring Boot.
Что я делаю неправильно?
Какие переменные среды вы ожидаете? Если вы не установили какие-либо не будут показаны. Это поможет, если вы разместите свой файл докеров. Я думаю, что вы хотите сделать это, чтобы получить доступ к манго из вашего апи, а? Затем просто определите mongodb как имя хоста mongo в конфигурации rest-api, и он должен работать. BTW: во втором вызове у вас есть ошибка, потому что вы не указываете mongodb, но --link db: db. - hrrgttnchml 6 часов назад
EDIT 1: @hrrgttnchml, я ожидаю эти переменные окружения, прямо из док:
DB_PORT
DB_PORT_5432_TCP
DB_PORT_5432_TCP_PROTO
DB_PORT_5432_TCP_PORT
DB_PORT_5432_TCP_ADDR
Я не думаю, что вы должны создать переменные окружения с - e, -env flags. Согласно документации, Docker создает их автоматически, когда вы связываете два контейнера:
Docker creates several environment variables when you link containers. Docker automatically creates environment variables in the target container based on the --link parameters. It will also expose all environment variables originating from Docker from the source container. These include variables from:
the ENV commands in the source container’s Dockerfile
the -e, --env and --env-file options on the docker run command when the source container is started
Я могу ошибаться, однако.
Вот мой отдых-апи dockerfile: http://pastebin.com/3Ktbbr9n
MongoDB dockerfile: http://pastebin.com/iqyKm5UK
Оба приложения могут быть запущены, когда контейнеры побежал. Просто не знаю, как их связать.
Да, я хочу, чтобы rest-api общался с базой данных mongodb.
Поскольку я бегу весна-ботинок для остальных-API, я могу указать в моих application.properties файл хост и порт моего MongoDB-сервера, такие как:
spring.data.mongodb.host=192.168.99.100
spring.data.mongodb.port=27017
Так ты говоришь мне для замены 192.168.99.100
with mongodb
?
Я также запускаю виртуальную машину окна оракула в окнах, поэтому сама виртуальная машина имеет IP-адрес, а при подключении к контейнеру я должен использовать IP-адрес компьютера и не локальный хост, так что здесь 192.168.99.100 из. Верный?
EDIT 2: я получил остальное-API для взаимодействия с MongoDB без контейнера связывания только с помощью адреса виртуальной машины вместе с выставленным порта в Dockerfile. Так что для mongodb это будет 192.168.99.100:27017, тогда как для rest-api это будет 192.168.99.100:8080.
Однако, это нецелесообразно, так как адрес IP является зашит в самого отдыха-апите класс. Так что кто-то другой не сможет запускать изображения в контейнере на своей машине, потому что ip-адреса не совпадают.
Теперь очевидно, что работа вокруг заключается в использовании контейнера, связывающего в качестве решения, поскольку хост и порт автоматически обновляются в файле/etc/hosts при их изменении, приводя нас к первоначальному вопросу о том, как получить привязку контейнера к Работа.
EDIT 3: Указание mongodb
как имя хоста в остальном-апи делает работу, но только тогда, когда псевдоним для базы данных передается в течение ссылке, такие как: --link mongodb
Какие переменные среды вы ожидаете? Если вы не установили какие-либо не будут показаны. Это поможет, если вы разместите свой файл 'dockerfile 'здесь. Я думаю, что вы хотите сделать это, чтобы получить доступ к манго из вашего апи, а? Затем просто определите * mongodb * как имя хоста mongo в конфигурации rest-api, и он должен работать. BTW: во втором вызове у вас есть ошибка, потому что вы не указываете mongodb, но '--link db: db'. –
@hrrgttnchml см. Редактирование в вопросе – Kingamere
Вы пытались проверить контейнер 'rest-api' и проверить записи хоста с помощью' docker exec rest-api2 host mongodb'? Он должен показать адрес с внутренним docker ip вашего контейнера mongo - обычно 172.x.x.x –