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

相关推荐
小此方4 小时前
Re:Linux系统篇(二十九)文件篇·二:深度解析Linux文件描述符、dup2指针覆盖与内建命令重定向完全解析
linux·运维·驱动开发
Cosolar7 小时前
LlamaIndex索引类型全解析:原理与实战指南
运维·服务器
方便面不加香菜9 小时前
Linux--基础IO(一)
linux·运维·服务器
鼎讯信通11 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库
三十..12 小时前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql
杨浦老苏12 小时前
开源多用户图书追踪系统LibrisLog
docker·群晖·收藏管理
跨境数据猎手12 小时前
大数据在电商行业的应用
大数据·运维·爬虫
linyanRPA13 小时前
影刀RPA店群自动化实战:多店铺活动自动报名与促销管理架构设计
运维·自动化·办公自动化·rpa·python脚本·爬虫自动化·店群自动化
会Tk矩阵群控的小木13 小时前
安卓群控系统对于游戏工作室实战教程
android·运维·游戏·adb·开源软件·个人开发
赵渝强老师14 小时前
【赵渝强老师】Kubernetes(K8s)中的金丝雀升级
linux·docker·云原生·容器·kubernetes