您好我正在尝试按照本指南链接我的容器:
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} }
答案 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
。