Alpine Docker容器hostname服务启动失败:sethostname操作未获权限
问题
基于Alpine构建了一个使用openrc的镜像,执行service start hostname(或service start networking)时出现如下错误:
- Setting hostname ...
hostname: sethostname: Operation not permitted [ !! ]- ERROR: hostname failed to start
容器hostname已设置,/etc/hostname内容正确,不想添加SYS_ADMIN权限来解决问题。
Dockerfile片段如下:
FROM alpine VOLUME /sys/fs/cgroup RUN apk add gitea openrc postgresql15 COPY entrypoint.sh /entrypoint.sh RUN openrc &&\ touch /run/openrc/softlevel &&\ chmod +x /entrypoint.sh CMD ["/bin/sh","/entrypoint.sh"]
解决方法
Docker容器的hostname由引擎在创建时设置,容器内默认没有修改hostname的权限,无需通过openrc的hostname服务重复设置,可通过以下方式处理:
方案1:直接禁用hostname服务
在entrypoint脚本或Dockerfile中执行命令,将该服务从默认启动项中移除:rc-update del hostname default方案2:修改hostname服务脚本跳过设置
编辑/etc/init.d/hostname,注释掉实际执行hostname设置的代码:
找到脚本中的hostname "$hostname"行,将其注释:# hostname "$hostname" # 跳过容器内的hostname设置操作方案3:调整networking服务的依赖
如果是启动networking服务时触发了hostname服务,可修改/etc/init.d/networking的依赖配置,找到depend()部分,移除need hostname这一行。
内容的提问来源于stack exchange,提问作者Matteo V
相关产品推荐
相关产品推荐

