我正在为本地网络编写聊天程序.我希望能够识别计算机并使用Python获取用户设置的计算机名称.
我正在创建一个像我的图像的实例
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,那么授予容器只是为了找到几个端口是一种危险的权限级别.
我想从node.js应用程序内部获取映射端口。
例如
docker-compose:
my-app:
build:
context: ./my-app
ports:
- "80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock
networks:
- private
Run Code Online (Sandbox Code Playgroud)
docker ps -a:
1234 my-app "/usr/local/bin/dock…" About a minute ago Up About a minute 0.0.0.0:33962->80/tcp
Run Code Online (Sandbox Code Playgroud)
我想33962从node.js应用程序获取端口。
有任何想法吗?
我知道可以访问docker api,以下命令可以正常工作:
curl -s --unix-socket /var/run/docker.sock http:/v1.24/containers/$HOSTNAME/json | jq -r '.Image'
但是,我真的想避免将暴露docker.sock给容器本身,因为它是CI构建的一部分。是否有其他方法可以2acdef41a0c从容器自身内部检索容器图像ID /哈希值(即),而无需暴露容器并向容器docker.sock发出curl请求?
也许像这里的Docker所示,如何从容器中获取容器信息?
由于 Docker 自引擎版本 20.10 起支持 cgroup v2,它将自动在启用了 cgroups v2 的发行版上使用它。从容器内获取唯一容器 ID 的已知解决方案不再有效。
/ # cat /proc/self/cgroup
0::/
/ # cat /proc/1/cpuset
/
Run Code Online (Sandbox Code Playgroud)
在 Debian 11 上使用 alpine:latest 尝试使用 docker v20.10.8。
cgroup v1 的工作解决方案: 如何从容器本身获取 Docker Linux 容器信息?
正如 docker 参考中所述,使用 cgroup v2,容器 id 在文件系统中的以下位置仍然可见,但无法从容器本身访问这些位置。
/sys/fs/cgroup/memory/docker/<longid>/ on cgroup v1, cgroupfs driver
/sys/fs/cgroup/memory/system.slice/docker-<longid>.scope/ on cgroup v1, systemd driver
/sys/fs/cgroup/docker/<longid/> on cgroup v2, cgroupfs driver
/sys/fs/cgroup/system.slice/docker-<longid>.scope/ on cgroup v2, systemd driver
Run Code Online (Sandbox Code Playgroud)
https://docs.docker.com/config/containers/runmetrics/#find-the-cgroup-for-a-given-container
编辑 1/2021-09-01:
一种解决方法是使用选项运行容器--cgroupns host。但这需要控制容器的创建。
/ # cat /proc/self/cgroup
0::/ …Run Code Online (Sandbox Code Playgroud) 因此,我试图动态运行下面的shell脚本,该脚本需要容器的容器ID /名称(将在其中运行脚本)。
一种方法是做docker ps然后获取容器ID,但这不会是动态的。
那么有没有办法动态地做到这一点?
#!/bin/bash
docker exec <container id/name> /bin/bash -c "useradd -m <username> -p <password>"
Run Code Online (Sandbox Code Playgroud) 如何在 Kubernetes 中从自身内部获取容器的完整 id。我想在作为 Kubernetes 容器运行的应用程序日志中添加容器 ID
如果我在 Docker 容器中运行一个 java 应用程序,并且我想从同一个 java 应用程序代码中获取正在运行的 docker 容器的名称(我的 java 应用程序在其中运行),那么通过 java 获取容器名称的方法是什么?代码?
请注意,我希望在容器内运行的同一个 java 应用程序中使用 java 代码。
如何从容器内获取docker的容器名称?
我不能使用inspect因为我必须使用容器内部的脚本来从JSON url获取信息.
我在 Linux 服务器中有 docker 容器,我需要知道如何获取容器内应用程序、服务及其状态的详细信息。我需要执行哪个命令才能获取这些详细信息。
例如:
容器包含 tomcat 服务器。我需要获取 tomcat 服务器的详细信息及其状态(服务是否正在运行)。
我不知道是否有任何命令可以获取这些详细信息。
如何使用 PHP 获取容器本身内的 Docker 容器 ID?
我刚刚发现 linux 命令如下:
DOCKER_CID=$(cat /proc/1/cpuset | cut -c9-)
Run Code Online (Sandbox Code Playgroud) docker ×9
containers ×4
java ×2
linux ×2
bash ×1
cgroups ×1
docker-swarm ×1
hostname ×1
jenkins ×1
kubernetes ×1
logging ×1
node.js ×1
php ×1
php-7.2 ×1
python ×1