首页 > 解决方案 > 有没有办法在容器中获取容器名称?

问题描述

有没有办法使用 processBuilder 在 java 程序中获取容器内的容器名称?

示例:命令docker run -it --name AppContainer RetrieveNameApp 应该返回AppContainer

谢谢 !

标签: dockerdocker-compose

解决方案


我刚刚遇到了这个用例,但是给出的例子是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"

推荐阅读