docker - 有没有办法在容器中获取容器名称?
问题描述
有没有办法使用 processBuilder 在 java 程序中获取容器内的容器名称?
示例:命令docker run -it --name AppContainer RetrieveNameApp
应该返回AppContainer
谢谢 !
解决方案
我刚刚遇到了这个用例,但是给出的例子是docker
中心化的,更不用说他们希望你公开docker.sock
哪个......这是糟糕的形式/安全风险。
先决条件:
apt update
apt install dnsutils
或者...
yum install bind-utils
最后:
hostname -I | xargs -L 1 -d ' ' dig +noall +answer -x | awk '{print $5}' | cut -f2 -d _ | sort | uniq
如果您在正在运行的 docker 容器中运行它,您将获得名称。
工作示例:
( docker-compose )注意:你可以将它完全复制到你的 shell 中。这仅用于演示目的,我不建议您docker-compose.yaml
这样写。
docker-compose -f <(cat << EOF
services:
this-is-my-name-every-body:
image: python:3.6
EOF
) run --rm this-is-my-name-every-body bash -c "apt update &>/dev/null; apt install -y dnsutils &>/dev/null; hostname -I | xargs -L 1 -d ' ' dig +noall +answer -x | awk '{print \$5}' | cut -f2 -d _ | sort | uniq"
( docker )注意:为了能够进行反向查找,该docker run
命令必须有一个--network
, 并且需要您执行docker network create
它(必须只运行一次)。
docker network create temp-net
docker run --rm -it --network temp-net --name hello-every-body python:3.6 bash -c "apt update &>/dev/null; apt install -y dnsutils &>/dev/null; hostname -I | xargs -L 1 -d ' ' dig +noall +answer -x | awk '{print \$5}' | cut -f2 -d _ | sort | uniq"
推荐阅读
- php - file_exists():open_basedir 限制生效。文件 (/tmp) 不在允许的路径内:
- typescript - TS 接口中的 V= 是什么意思?
- reactjs - React 尝试将异步调用传递给 Props
- r - 如何将一个 df 的 colnames 与另一个 df 中找到的值匹配 - 如果找到,用更多值重命名这些 cols?
- mongodb - 如何使`org.mongodb.driver.cluster`在spring boot中使用嵌入式mongodb?
- android - 如何在 Android API 24 之前的设备上设置锁屏壁纸?
- laravel - Laravel - 独特的请求规则允许重复
- twilio - Twilo 无法调用 SMS 的状态回调 url
- azure - 通过 PowerShell 检索 Azure AD 应用程序的“API 权限”
- python - tensorflow v2.1 使用 tf.keras 训练 DCGAN 失败,发生了什么?