ThinkTwive
V2EX  ›  Docker

请问各位 Dockerfile 里面 Run 的命令怎么授予 root 权限操作。

By ThinkTwive at 2019 年 11 月 14 日 · 10173 次点击

FROM pgsql:v1
COPY ./* /home/setup/
WORKDIR /home/setup
RUN su - postgres -c "pg_ctl start"; \
cd script; \
chmod +x ./*.sh; \
sh install.sh
ENTRYPOINT ["/usr/sbin/init"]
现在里面执行 su - postgres -c "pg_ctl start"这一条命令的时候就会报错。提示权限不足。
已经卡了两天了。求大佬答疑解惑

12 条回复  •  2019-11-15 17:37:53 +08:00
jybox
   1
jybox  
   2019 年 11 月 14 日
USER root
RUN ...
USER <原来的用户,详见 pgsql:v1>
ThinkTwive
   2
ThinkTwive  
OP
   2019 年 11 月 14 日
@jybox 感谢回答,加上过 root,但还是不起作用
ThinkTwive
   3
ThinkTwive  
OP
   2019 年 11 月 14 日
要是手动进入镜像的话我知道可以通过--privileged 参数来解决,现在在 Dockerfile 里面。我真的抓瞎了。
zunceng
   4
zunceng  
   2019 年 11 月 14 日
docker 官方文档里面就有 postgresql 的例子 不需要自己写呀
ThinkTwive
   5
ThinkTwive  
OP
   2019 年 11 月 14 日 via Android
@zunceng emmm 这个镜像是公司产品的镜像,然后这个产品的安装需要数据库启动。。。所以才要执行这一步
zunceng
   6
zunceng  
   2019 年 11 月 14 日   ❤️ 1
放在 entrypoint 里面做吧 可能要加个判断 第二次启动的时候跳过安装
awm47
   7
awm47  
   2019 年 11 月 14 日   ❤️ 1
可以看下官方的这一行代码

https://github.com/docker-library/postgres/blob/master/11/alpine/docker-entrypoint.sh#L48

原理就是在起容器的时候再做初始化工作(执行 entrypoint)
ThinkTwive
   8
ThinkTwive  
OP
   2019 年 11 月 14 日
@jaynos 感谢指导。对 entrypoint 还不太了解。我使用 entrypoint 时"su","-","postgres"分别是三个参数。可以执行,但是需要输入密码,输入密码后还是提示权限有问题
@zunceng 好的,感谢指导,我仔细看看这个代码。
awm47
   9
awm47  
   2019 年 11 月 15 日
ThinkTwive
   10
ThinkTwive  
OP
   2019 年 11 月 15 日
@jaynos 十分感谢。感觉一个坑接着一个坑。公司内网,感觉里面好多代码都操作不了。想直接用官方的数据库镜像,发现公司产品只支持 centos7 和 suse11。感觉要崩溃了,我仔细研究下 gosu 怎么用吧。su-exec 没有这个命令,我又试了下 sudo su - postgres,发现还是不行
awm47
   11
awm47  
   2019 年 11 月 15 日
@ThinkTwive #10

docker 和什么宿主机没关系呀? 想自己编译镜像可以阿里云开个几小时的按时付费香港实例 1c2g, 大概一小时 2 毛钱
ThinkTwive
   12
ThinkTwive  
OP
   2019 年 11 月 15 日
@jaynos 公司里面这些都上不去。。在上面做了,也传不到公司的服务器上。我现在离线装了个 gosu。然后使用
gosu postgres:dba pg_ctl start。很确定这个组名就是安装数据库的那个组名和用户名。但是还是提示 database dictionary 没有 initial。然后我自己 initial,又提示我,初始化失败,缺少 ascii_and_mic 文件。。。
感觉用户组名都一样怎么会打不开呢。是不是 gosu 的语法我理解错了
© 2026 V2EX · 32ms · 3.9.8.5