最近一段时间都在折腾幻兽帕鲁的一键搭建脚本:https://www.xuehaiwu.com/palworld-server/
这两天连续遇到两个群晖用户的反馈:配置修改不成功。然后让他们用导入导出功能也都说不行,还会提示:Error response from daemon: unable to find getent command。
经过好几次重新下载安装之类的操作终于在其中一个用户后续的操作上得到了思路。他是先在外部修改了一次文件然后再上传回容器内部。
这样系统就能读取到修改后的配置了。 我就想到了权限问题。最后又尝试了几次,终于通过在容器外给配置文件授权777,这样就避免了权限问题。当然这种方式有取巧的嫌疑。
docker exec -u root steamcmd chmod 777 /home/steam/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
保险一点的可以授权744或者655,这个不影响,只要确保这个文件所有人可读就行
但是由于群晖是封闭式系统。然后他的容器也怪怪的,出现这个原因是因为在使用
docker cp -a
命令中,含有选项-a
导致的。这个选项可以做到以下几点
-
保留文件的所有者和权限(等同于
-p
参数); -
如果源文件是一个目录,复制整个目录及其子目录(等同于
-r
参数); -
保留文件的修改时间。
怎么说呢Nas系统自带的容器也许有自己的适配或者安全性角度考虑所以故意不给用吧。
以上是我脚本中遇到的问题解决方法,下面给普通docker用户一个解决方案的参考
普通用户遇上这个问题该怎么做
这个错误提示是因为 Docker 容器内部没有找到 getent
命令。getent
是一个常用于 Unix 和 Unix-like 系统的命令,用于获取指定的系统数据库的条目。这个命令可能没有包含在你的 Docker 镜像中。
这个问题的解决方案可能会因你的具体需求和你使用的 Docker 镜像的类型而有所不同。以下是一些可能的解决方案:
-
使用一个包含
getent
的 Docker 镜像。许多基于 Linux 的 Docker 镜像,如 Ubuntu 或 Debian,都默认包含了getent
命令。 -
在 Dockerfile 中安装
getent
。如果你正在使用的 Docker 镜像没有包含getent
,你可以通过在 Dockerfile 中添加安装命令来安装它。例如,如果你的 Docker 镜像基于 Alpine Linux,你可以使用以下命令安装getent
:
RUN apk add --no-cache libc6-compat
请注意,这只是一种可能的解决方案,具体的命令可能会因你的 Docker 镜像的类型而有所不同。
-
不使用
getent
。如果你的应用不需要getent
,你可以考虑修改你的应用,避免使用getent