Контейнер за връзки на 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.

какво правя грешно

Кои променливи на средата очаквате? Ако не зададете, ще се покаже всяко не. Ще помогне, ако публикувате вашия докер файл тук. Мисля, че това, което искате да направите, е да получите достъп до mongo от вашия rest api, нали? След това просто дефинирайте mongodb като името на хоста на mongo във вашата rest-api конфигурация и трябва да работи. Между другото: при второто извикване имате грешка, защото не посочвате mongodb, а --link db:db. – hrrgttnchml преди 6 часа

РЕДАКТИРАНЕ 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

Може обаче да греша.

Ето моя докер файл rest-api: http://pastebin.com/3Ktbbr9n

Докер файл MongoDB: http://pastebin.com/iqyKm5UK

И двете приложения могат да бъдат стартирани, когато контейнерите се изпълняват. Просто не знам как да ги свържа.

Да, искам rest-api да комуникира с базата данни mongodb.

Тъй като изпълнявам spring-boot за rest-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 адреса на машината, а НЕ localhost, така че оттам е 192.168.99.100. Правилно?

РЕДАКТИРАНЕ 2: Накарах rest-api да комуникира с mongodb без свързване на контейнер, като просто използвах адреса на виртуалната машина заедно с открития порт в Dockerfile. Така че за mongodb ще бъде 192.168.99.100:27017, докато за rest-api ще бъде 192.168.99.100:8080.

Въпреки това това е непрактично, защото ip адресът е твърдо кодиран в самия клас rest-api. Така че някой друг няма да може да стартира изображенията в неговия контейнер на неговата машина, защото ip адресите няма да съвпадат.

Сега очевидно решението е да се използва свързване на контейнер като решение, тъй като хостът и портът се актуализират автоматично във файла /etc/hosts, когато се променят, което ни връща към първоначалния въпрос как да накараме свързването на контейнер да работи.

РЕДАКТИРАНЕ 3: Посочването на mongodb като име на хост в rest-api работи, но само когато псевдонимът за базата данни е предаден за връзката, като например: --link mongodb


person Kingamere    schedule 14.08.2015    source източник
comment
Кои променливи на средата очаквате? Ако не зададете, ще се покаже всяко не. Ще помогне, ако публикувате своя dockerfile тук. Мисля, че това, което искате да направите, е да получите достъп до mongo от вашия rest api, нали? След това просто дефинирайте mongodb като името на хоста на mongo във вашата rest-api конфигурация и трябва да работи. Между другото: при второто извикване имате грешка, защото не посочвате mongodb, а --link db:db.   -  person daniel.eichten    schedule 15.08.2015
comment
@hrrgttnchml вижте въпросната редакция   -  person Kingamere    schedule 15.08.2015
comment
Опитахте ли да инспектирате своя rest-api контейнер и да проверите за хост записи с помощта на docker exec rest-api2 host mongodb? Трябва да показва адрес с вътрешния докер ip на вашия mongo контейнер – обикновено 172.x.x.x   -  person daniel.eichten    schedule 15.08.2015
comment
Ааа, да, това проработи, това е IP адресът, който търсех, благодаря.   -  person Kingamere    schedule 15.08.2015


Отговори (1)


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

person Andy Shinn    schedule 14.08.2015
comment
devops-rest-api има входна точка от: ENTRYPOINT [java,-jar,rest-api.war] - person Kingamere; 15.08.2015
comment
Добре, така че когато подадете env към командата за изпълнение, тя става java -jar rest-api.war env. Това вероятно не е това, което очаквахте. - person Andy Shinn; 16.08.2015
comment
Ако отговорът ми помогна, помислете дали да го приемете, така че този въпрос вече да не е в списъка без отговор. - person Andy Shinn; 03.09.2015