Здравствуйте, я пытаюсь связать свои контейнеры, следуя этому руководству:
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.
Что я делаю не так?
Какие переменные среды вы ожидаете? Если вы не установите, не будет отображаться. Было бы полезно, если бы вы разместили свой файл docker здесь. Я думаю, что вы хотите получить доступ к монго из вашего API отдыха, верно? Затем просто укажите mongodb как имя хоста mongo в вашей конфигурации rest-api, и все должно работать. Кстати: во втором вызове у вас есть ошибка, потому что вы указываете не 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. Согласно документам, 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
Впрочем, я могу ошибаться.
Вот мой файл docker для rest-api: http://pastebin.com/3Ktbbr9n
Файл докера MongoDB: http://pastebin.com/iqyKm5UK
Оба приложения могут быть запущены при запуске контейнеров. Только не знаю, как их связать.
Да, я хочу, чтобы остальные API взаимодействовали с базой данных mongodb.
Поскольку я запускаю spring-boot для остальных API, я могу указать в своем файле application.properties хост и порт моего сервера mongodb, например:
spring.data.mongodb.host=192.168.99.100
spring.data.mongodb.port=27017
Так ты предлагаешь мне заменить 192.168.99.100
with mongodb
?
Я также запускаю виртуальную машину oracle box в Windows, поэтому у самой виртуальной машины есть IP-адрес, и при подключении к контейнеру я должен использовать IP-адрес машины, а НЕ локальный хост, поэтому отсюда и 192.168.99.100. Правильный?
EDIT 2: я получил rest-api для связи с mongodb без привязки контейнера, просто используя адрес виртуальной машины вместе с открытым портом в Dockerfile. Таким образом, для mongodb это будет 192.168.99.100:27017, тогда как для остальных API это будет 192.168.99.100:8080.
Однако это нецелесообразно, поскольку IP-адрес жестко запрограммирован в самом классе rest-api. Таким образом, кто-то другой не сможет запускать изображения в своем контейнере на своем компьютере, потому что IP-адреса не будут совпадать.
Теперь очевидно, что обходной путь заключается в использовании связывания контейнеров в качестве решения, поскольку хост и порт автоматически обновляются в файле /etc/hosts при их изменении, что возвращает нас к исходному вопросу о том, как заставить работать связывание контейнеров.
EDIT 3: Указание mongodb
в качестве имени хоста в rest-api действительно работает, но только когда псевдоним для базы данных передается для ссылки, такой как: --link mongodb
dockerfile
. Я думаю, что вы хотите получить доступ к монго из вашего API отдыха, верно? Затем просто укажите mongodb как имя хоста mongo в вашей конфигурации rest-api, и все должно работать. Кстати: во втором вызове у вас есть ошибка, потому что вы указываете не mongodb, а--link db:db
. - person daniel.eichten   schedule 15.08.2015rest-api
и проверить наличие записей хоста с помощьюdocker exec rest-api2 host mongodb
? Он должен показывать адрес с внутренним IP-адресом докера вашего контейнера монго — обычно 172.x.x.x. - person daniel.eichten   schedule 15.08.2015