【问题标题】:Docker run - how to share UTS namespace between containers?Docker 运行 - 如何在容器之间共享 UTS 命名空间?
【发布时间】:2021-01-28 12:07:54
【问题描述】:

默认情况下,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.

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

【问题讨论】:

  • 我阅读了 Docker 的文档,似乎无法指定除“主机”之外的任何内容。使用 LXC 容器,可以实现:lxc-start 接受选项“--share-uts=...”

标签: docker linux-namespaces


【解决方案1】:

我不知道如何在容器之间共享 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的同一个网络,引用this。仅供参考,以防万一。

另一种方式可能只是将/etc/hostname暴露给bind mountsvolume,让你需要的所有容器都使用同一个容器,那么你就不需要共享网络了。

【讨论】:

    猜你喜欢
    • 2017-11-01
    • 2018-12-05
    • 1970-01-01
    • 2019-01-16
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多