修改 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,批量执行修改命令。

相关推荐
wuyikeer1 小时前
docker下搭建redis集群
redis·docker·容器
hsjcjh2 小时前
Nodemailer使用教程:在Node.js中发送电子邮件
linux·运维·node.js
没有梦想的咸鱼185-1037-16632 小时前
北斗高精度数据解算:破解城市峡谷/长基线/无网区难题,从毫米级定位到自动化交付——(GAMIT/GLOBK底层核心解算技术方法)
运维·arcgis·数据分析·自动化
不怕犯错,就怕不做3 小时前
linux 如何查看自己的帐号密码及samba的帐号和密码
linux·运维·服务器
实在智能RPA3 小时前
Agent 在物流行业能实现哪些自动化?——深度拆解 AI Agent 驱动的智慧物流新范式
运维·人工智能·ai·自动化
张3233 小时前
Linux 启动过程
linux·运维
chinesegf3 小时前
ubuntu建虚拟环境制作docker容器
linux·ubuntu·docker
李彦亮老师(本人)3 小时前
Rocky Linux 9.x 新特性详解
linux·运维·服务器·centos·rocky linux
Keanu-4 小时前
Docker---容器编排工具Docker Compose
docker·容器