Docker运行-如何在容器之间共享UTS名称空间?

问题描述

认情况下,Docker run命令对容器使用专用的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.

基于documentation,似乎无法使用--uts标志引用容器。其他与名称空间相关的标志(例如--pid,-network等)则不是这种情况。它们支持引用其他容器。为什么--utc标志不支持“ container:”模式?如何在容器之间共享UTS命名空间,以便它们共享主机名?

解决方法

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

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的相同网络,指的是this。仅供参考,以防万一。

另一种方法可能只是将/etc/hostname暴露给bind mountsvolume,然后让您需要使用的所有容器都使用同一容器,那么您就无需共享网络。