更改 docker 容器内的主机名时出错

Tas*_*man 5 centos travis-ci ansible docker

我正在尝试使用以下命令更改运行 centos 的 docker 容器的主机名

hostnamectl set-hostname test.ovirt.org
Run Code Online (Sandbox Code Playgroud)

但它给了我一个回溯

Could not set property: Failed to execute program /lib64/dbus-1/dbus-daemon-launch-helper: Success
Run Code Online (Sandbox Code Playgroud)

退出代码为 1。

这是相关的 travis-CI 构建回溯

编辑

我正在运行命令来更改 Travis 构建中 ansible 任务内的主机名。使用交互模式编辑主机名不是一个选项。

Her*_*arn 4

如果您希望根据您的要求命名容器,您可以在运行容器时使用参数 --hostname 。

# docker run --hostname=my-server -it ubuntu:15.0 /bin/bash
root@my-server:/# hostname
my-server
root@my-server:/# 
Run Code Online (Sandbox Code Playgroud)

EDIT1:由于您需要在运行时更改,容器需要具有 root 权限才能更改主机名。默认情况下,Docker 容器将具有有限的 root 权限。

当您尝试更改主机名时,可能会出现以下错误,提示您应该具有 root 权限:

# docker run -it ubuntu:15.0 /bin/bash
root@92b712251220:/# hostname
92b712251220
root@92b712251220:/# hostname new-server
hostname: you must be root to change the host name
root@92b712251220:/# 
Run Code Online (Sandbox Code Playgroud)

当您使用 --privileged 选项运行同一容器时,这意味着以所有 root 权限运行容器,您将能够更改主机名:

# docker run -it --privileged ubuntu:15.0 /bin/bash
root@08c70ab0c9e3:/# hostname new-server
root@08c70ab0c9e3:/# hostname
new-server
root@08c70ab0c9e3:/# 
Run Code Online (Sandbox Code Playgroud)

理想情况下,使用 --privileged 选项运行容器并不是最佳实践,该选项可以完全控制不安全的主机。