Docker链接容器 - 未显示环境变量

时间:2015-08-14 20:45:46

标签: docker spring-boot boot2docker dockerfile docker-registry

您好我正在尝试按照本指南链接我的容器:

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

但是,它不会打印出文档中显示的环境变量。

我刚从Spring Boot应用程序中获取STDOUT。

我做错了什么?

您期望哪些环境变量?如果您没有设置,则会显示任何非。如果你在这里发布dockerfile会有所帮助。我想你想要做的是从你的休息api访问mongo,对吗?然后在rest-api配置中将mongodb定义为mongo的主机名,它应该可以工作。 BTW:在第二次调用中你有一个错误,因为你没有指定mongodb但是--link db:db。 - hrrgttnchml 6小时前

编辑1 :@hrrgttnchml,我期待这些环境变量,直接来自doc:

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 dockerfile:http://pastebin.com/3Ktbbr9n

MongoDB dockerfile:http://pastebin.com/iqyKm5UK

运行容器时可以启动这两个应用程序。只是不知道如何链接它们。

是的,我希望rest-api与mongodb数据库进行通信。

由于我正在为rest-api运行spring-boot,我可以在application.properties文件中指定我的mongodb服务器的主机和端口,例如:

spring.data.mongodb.host=192.168.99.100
spring.data.mongodb.port=27017

您是否告诉我替换192.168.99.100 with mongodb

我也在Windows上运行oracle box虚拟机,因此VM本身有一个ip地址,当连接到容器时我必须使用机器的IP而不是localhost,所以这是其中192.168.99.100来自。正确的吗?

编辑2:我已经让rest-api与mongodb 进行通信,没有容器链接,只需使用VM的地址和暴露的端口即可Dockerfile。因此,对于mongodb,它将是192.168.99.100:27017,而对于rest-api,它将是192.168.99.100:8080。

然而,这是不切实际的,因为ip地址硬编码进入rest-api类本身。所以其他人将无法在他的机器上运行图像,因为ip地址不匹配。

现在显然,解决方法是使用容器链接作为解决方案,因为主机和端口在更改时会在/ etc / hosts文件中自动更新,这使我们回到原来的问题,即如何让容器链接工作。

编辑3:指定mongodb作为rest-api中的主机名确实有效,但仅当传入数据库的别名时才会链接,例如:{{1} }

1 个答案:

答案 0 :(得分:1)

*function date_time(id) { date = new Date; year = date.getFullYear(); month = date.getMonth(); months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); d = date.getDate(); day = date.getDay(); days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); h = date.getHours(); if(h<10) { h = "0"+h; } m = date.getMinutes(); if(m<10) { m = "0"+m; } s = date.getSeconds(); if(s<10) { s = "0"+s; } result = ''+days[day]+' '+months[month]+' '+d+' '+year+' '+h+':'+m; document.getElementById(id).innerHTML = result; setTimeout('date_time("'+id+'");','60000'); return true; } setInterval(function() { var minutePhotoElement = document.getElementById('minutePhoto'); minutePhoto.src = "'img/('result').jpg'"; }, 60000); //-->* 可能有devops-rest-api吗? ENTRYPOINT上的任何命令行参数都将传递给入口点。请尝试覆盖docker run

,而不是指定命令