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

2019-11-14 18:35:22 +08:00
 ThinkTwive

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"这一条命令的时候就会报错。提示权限不足。
已经卡了两天了。求大佬答疑解惑

9116 次点击
所在节点    Docker
12 条回复
jybox
2019-11-14 18:40:25 +08:00
USER root
RUN ...
USER <原来的用户,详见 pgsql:v1>
ThinkTwive
2019-11-14 18:43:30 +08:00
@jybox 感谢回答,加上过 root,但还是不起作用
ThinkTwive
2019-11-14 18:44:51 +08:00
要是手动进入镜像的话我知道可以通过--privileged 参数来解决,现在在 Dockerfile 里面。我真的抓瞎了。
zunceng
2019-11-14 18:58:06 +08:00
docker 官方文档里面就有 postgresql 的例子 不需要自己写呀
ThinkTwive
2019-11-14 19:43:26 +08:00
@zunceng emmm 这个镜像是公司产品的镜像,然后这个产品的安装需要数据库启动。。。所以才要执行这一步
zunceng
2019-11-14 19:53:08 +08:00
放在 entrypoint 里面做吧 可能要加个判断 第二次启动的时候跳过安装
jaynos
2019-11-14 20:31:25 +08:00
可以看下官方的这一行代码

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

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/619619

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX