修改 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 小时前
nerdctl实战:Docker风格的Containerd操作利器
docker·容器·containerd
其实防守也摸鱼2 小时前
常见安全架构中 Shiro 的认证确认机制解析
运维·服务器·数据库·windows·github
九皇叔叔2 小时前
Kubernetes 命令式对象配置详解:使用 YAML 管理 Kubernetes 资源
docker·容器·k8s
^Rocky3 小时前
IT 疑难杂症诊疗室:复杂技术问题解决实录
运维·bug
CVer儿3 小时前
docker内llama.cpp和TRT-LLM win11本机部署qwen3.8
docker
萤火夜3 小时前
Docker(四) Docker介绍
docker·容器
挖掘狂人3 小时前
当生产环境"变慢",我用这套 perf + strace 30 分钟定位瓶颈
linux·运维·性能优化
.冰块.4 小时前
Docker 镜像深度学习:分层 Copy‑on‑Write、Dockerfile 语法、Harbor 私有仓库实操
docker·容器·harbor·镜像·dockerfile·images
szephyr4 小时前
Docker 镜像瘦身实战:从 1.2GB 压到 85MB 的完整过程
docker·容器·部署·多阶段构建·镜像优化
小马同学-4 小时前
Containerd入门:架构原理与安装部署
容器·containerd