M15*_*156 9 java environment-variables docker
我正在创建一个像我的图像的实例
docker run -P webmodule-xy
Run Code Online (Sandbox Code Playgroud)
webmodule的Dockerfile公开了一个端口(例如8080).
我现在的目标是获取可通过Java从外部访问的映射/分配端口号.是否有环境变量或类似的东西?
用例:webmodule-xy应该在另一个Web应用程序上注册并提供其IP +端口,以便其他应用程序可以在以后联系webmodule-xy.IP没问题,但端口是.
我已经在GitHub上找到了这个未解决的问题,但我无法相信没有简单的解决方案.就像那里所说,REST不是一个选项:
允许容器访问REST API是有问题的.首先,REST API是可读/写的,如果你需要的只是阅读你的portmappings,那么授予容器只是为了找到几个端口是一种危险的权限级别.
容器运行后,您应该可以使用docker inspect
该-P
选项来获取主机上映射的端口号.
可以在结果中循环遍历数组和映射以生成简单的文本输出:
docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID
Run Code Online (Sandbox Code Playgroud)
查找特定的端口映射
docker inspect --format='{{(index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort}}' $INSTANCE_ID
Run Code Online (Sandbox Code Playgroud)
我现在想要了解在容器中运行的java app中的这个随机端口.
如" Docker中,如何从容器中获取容器信息? "中所述,您可以:
GET /containers/<docker_id>/json HTTP/1.1
Run Code Online (Sandbox Code Playgroud)由于从容器使用Docker Remote API是有问题的(因为可写访问),您可以考虑将端口添加为可变环境.
a docker exec
,之后docker run
,将端口读取docker inspect
作为环境变量添加并运行java app(issue 8838):
docker exec -i CONTAINER_ID /bin/bash -c "export PORT=<port> && run_java-app"
Run Code Online (Sandbox Code Playgroud)java应用程序(来自容器内)将读取环境变量
归档时间: |
|
查看次数: |
1331 次 |
最近记录: |