0

Здравствуйте, я пытаюсь связать свои контейнеры следующие данного руководства: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.100with 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

+0

Какие переменные среды вы ожидаете? Если вы не установили какие-либо не будут показаны. Это поможет, если вы разместите свой файл 'dockerfile 'здесь. Я думаю, что вы хотите сделать это, чтобы получить доступ к манго из вашего апи, а? Затем просто определите * mongodb * как имя хоста mongo в конфигурации rest-api, и он должен работать. BTW: во втором вызове у вас есть ошибка, потому что вы не указываете mongodb, но '--link db: db'. –

+0

@hrrgttnchml см. Редактирование в вопросе – Kingamere

+1

Вы пытались проверить контейнер 'rest-api' и проверить записи хоста с помощью' docker exec rest-api2 host mongodb'? Он должен показать адрес с внутренним docker ip вашего контейнера mongo - обычно 172.x.x.x –

ответ

1

ли devops-rest-api есть ENTRYPOINT возможно? Любые параметры командной строки на вашем docker run будут переданы в точку входа. Вместо указания команды попробуйте переопределить --entrypoint env.

+0

devops-rest-api имеет точку входа: ENTRYPOINT ["java", jar "," rest-api.war "] – Kingamere

+0

ОК, поэтому, когда вы передаете команду env' команде запуска, она становится java -jar rest -api.war env'. Это, вероятно, не то, что вы ожидали. –

+0

Ahh ok Я вижу, в чем проблема. спасибо – Kingamere