修改 Docker 容器主机名

修改 Docker 容器主机名

你需要修改 Docker 容器的主机名(hostname),分为创建容器时指定 hostname运行中容器临时修改运行中容器永久修改三种场景,我会给出每种场景的直接可用命令,适配不同需求:

一、创建容器时指定 hostname(推荐,永久生效)

这是最规范的方式,创建容器时直接通过 --hostname(简写 -h)参数指定,容器启动后 hostname 永久生效:

Bash 复制代码
# 示例:创建容器时指定 hostname 为 "docker-node-01"
docker run -d --name test --hostname docker-node-01 镜像名

# 结合你之前的网络配置(指定IP+网关+hostname)
docker run -d --name test --hostname docker-node-01 --privileged \
  --add-host=host.docker.internal:host-gateway \
  镜像名
  • --hostname docker-node-01:将容器 hostname 设置为 docker-node-01

  • 验证:docker exec test hostname → 输出 docker-node-01

二、运行中容器临时修改 hostname(重启失效)

若容器已运行,可通过 nsenterdocker exec 临时修改(容器重启后恢复原 hostname):

Bash 复制代码
# 方法1:docker exec 临时修改(最简单)
docker exec -it test hostname new-hostname-01

# 验证(需重新进入容器终端才生效)
docker exec -it test bash
hostname  # 输出 new-hostname-01

# 方法2:nsenter 强制修改(立即生效,无需重新进入)
# 1. 获取容器 PID
PID=$(docker inspect -f '{{.State.Pid}}' test)
# 2. 修改 hostname
sudo nsenter -u --target $PID hostname new-hostname-01
# 验证
docker exec test hostname  # 直接输出 new-hostname-01

三、运行中容器永久修改 hostname(重启不失效)

临时修改重启后会丢失,需修改容器配置文件 + 重启容器:

步骤1:停止容器
Bash 复制代码
docker stop test
步骤2:修改容器配置文件

容器的 hostname 配置存储在 /var/lib/docker/containers/容器ID/config.v2.json(不同 Docker 版本路径可能略有差异):

Bash 复制代码
# 1. 查找容器ID
CONTAINER_ID=$(docker inspect -f '{{.Id}}' test)

# 2. 编辑配置文件(替换 old-hostname 为新 hostname)
sudo sed -i 's/"Hostname":"old-hostname"/"Hostname":"new-hostname-01"/g' /var/lib/docker/containers/${CONTAINER_ID}/config.v2.json

# 3. (可选)修改 hosts 文件(避免 hostname 解析问题)
sudo sed -i 's/old-hostname/new-hostname-01/g' /var/lib/docker/containers/${CONTAINER_ID}/hosts
步骤3:重启 Docker 服务 + 启动容器
Bash 复制代码
sudo systemctl restart docker
docker start test
步骤4:验证
Bash 复制代码
docker exec test hostname  # 输出 new-hostname-01

四、批量修改多个容器 hostname(单行命令)

若需批量修改 docker ps 中的所有容器 hostname(按容器名规则命名,如 test-01/test-02):

Bash 复制代码
# 批量创建时指定 hostname
for i in {1..5}; do docker run -d --name test-$i --hostname docker-node-$i 镜像名; done

# 批量修改运行中容器(临时)
for CONTAINER in $(docker ps --format '{{.Names}}'); do docker exec -it $CONTAINER hostname ${CONTAINER}-new; done

关键注意事项

  1. 容器网络模式影响 :若容器使用 --net=host(主机网络),容器 hostname 会和宿主机一致,修改容器 hostname 会同步修改宿主机(不建议);

  2. DNS/解析问题 :修改 hostname 后,建议同步修改 /etc/hosts(容器内),避免解析失败:

    Bash 复制代码
    docker exec test bash -c "echo '127.0.0.1 new-hostname-01' >> /etc/hosts"
  3. Podman 兼容 :Podman 修改 hostname 的命令和 Docker 完全一致(podman run --hostname/podman exec hostname),适配你之前的容器环境。

总结

  1. 推荐方式:创建容器时用 --hostname 指定,永久生效且无副作用;

  2. 临时修改:运行中容器用 docker exec hostname 新名称,重启失效;

  3. 永久修改:停止容器 → 修改 config.v2.json → 重启 Docker + 容器;

  4. 批量修改:通过 for 循环遍历容器名/ID,批量执行修改命令。

相关推荐
这也能行2 小时前
KeepAlived
运维·服务器·网络
人间打气筒(Ada)2 小时前
gitlab私有仓库搭建
运维·gitlab·项目实战·devops·代码部署实战·版本控制仓库
何中应2 小时前
ubuntu如何设置远程工具连接
linux·运维·ubuntu
黑蛋同志2 小时前
Rocky Linux 10 上搭建 社区版 GitLab CE
linux·运维·gitlab
fygfh.2 小时前
Linux外设之 串口(UART)的使用
linux·运维·单片机
赛博云推-Twitter热门霸屏工具2 小时前
推特自动化营销新趋势:赛博云推如何实现热门霸屏与精准获客
运维·科技·自动化·媒体·twitter
劳埃德福杰2 小时前
Windows电脑安装双系统,如何删除其中一个系统
运维·windows·电脑·笔记本电脑
一个向上的运维者2 小时前
从 K8s Device Plugin 到 Volcano 多元算力管理:GPU 显存共享实战与深度解析
云原生·容器·kubernetes
yuanmenghao2 小时前
WSL + Docker GPU 环境排查:NVIDIA-SMI couldn‘t find libnvidia-ml.so 问题分析与解决
linux·运维·服务器·docker·容器