我知道以root身份运行Docker容器是不安全的,所以我想改变运行它们的方式。我有一个运行postgres的容器,到目前为止,它是以root身份运行的(默认)。但是,当我将这一行添加到docker-compose
文件时:
user: ${CURRENT_UID}
字符串
其中CURRENT_UID
为:
export CURRENT_UID=$(id -u):$(id -g)
型
我在容器日志中得到以下错误:
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted
fixing permissions on existing directory /var/lib/postgresql/data ... chmod: changing permissions of '/var/lib/postgresql/data': Operation not permitted
chmod: changing permissions of '/var/run/postgresql': Operation not permitted
型
运行pg-admin
容器时的情况相同,错误消息为:
PermissionError: [Errno 13] Permission denied: '/var/log/pgadmin'
型
当然,这些错误是有道理的,我不是root,但postgres需要root访问权限。
这是否意味着不可能以非root身份运行?
2条答案
按热度按时间3b6akqbq1#
这是否意味着不可能以非root身份运行?
事实上,postgres服务 * 已经 * 以非root用户的身份运行。
postgres
容器的启动过程实际上是:1.创建必要的目录并设置适当的所有权
1.切换到
postgres
用户1.启动postgres
因此,如果您启动
postgres
映像,即使没有指定用户:字符串
你会发现它以
postgres
用户的身份运行:型
也完全可以以非root用户的身份启动镜像,但在这种情况下,您必须确保必要的目录存在 * 并且 * 具有适当的所有权。在像Kubernetes/OpenShift这样的环境中,容器编排系统会在挂载卷时为你处理这个问题,但是当使用纯Docker(或docker-compose)时,你必须自己处理。
这里有一种方法:
型
bwitn5fc2#
在Kubernetes中如何做到这一点:
字符串