首页 > 解决方案 > Docker 运行 - 如何在容器之间共享 UTS 命名空间?

问题描述

默认情况下,Docker 运行命令为容器使用专用的 UTS 命名空间,因此容器拥有自己的/唯一的主机名。我正在尝试在两个容器之间共享 UTS 命名空间,但似乎使用 docker run 命令是不可能的。

以下是我运行的命令 -

docker run -d --name container1 alpine sleep infinity
docker run -it --name container2 --uts container:container1 alpine /bin/sh

错误 -

docker: --uts: invalid UTS mode.

根据文档,似乎无法使用 --uts 标志引用容器。其他与命名空间相关的标志(如 --pid、--network 等)并非如此。它们支持引用其他容器。为什么 --utc 标志不支持“container:<name|id>”模式?如何在容器之间共享 UTS 命名空间以便它们共享主机名?

标签: dockerlinux-namespaces

解决方案


我不知道如何在容器之间共享 UTS 命名空间。但是,如果您的最终目标只是hostname在容器之间共享,那么如果您不关心网络共享,那么 next 应该可以工作:

shubuntu1@shubuntu1:~$ docker run -idt --name container1 ubuntu:18.04 /bin/bash
3b024de861049c63852e5b196b8730c23ccba8454eb894aa1159c046dd35043e
shubuntu1@shubuntu1:~$ docker run -idt --name container2 --net container:container1 ubuntu:18.04 /bin/bash
ee3d696a589bb7aa3000cec7587f4b920088edf829f8cda029b019316451e92f
shubuntu1@shubuntu1:~$ docker exec -it container1 hostname
3b024de86104
shubuntu1@shubuntu1:~$ docker exec -it container2 hostname
3b024de86104

它让container2使用同一个网络的container1,指的是这个。仅供参考,以防万一。

另一种方法可能只是暴露/etc/hostnamebind mountsor volume,让你需要的所有容器都使用同一个容器,那么你就不需要共享网络了。


推荐阅读