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"这一条命令的时候就会报错。提示权限不足。
已经卡了两天了。求大佬答疑解惑
1
jybox 2019-11-14 18:40:25 +08:00
USER root
RUN ... USER <原来的用户,详见 pgsql:v1> |
2
ThinkTwive OP @jybox 感谢回答,加上过 root,但还是不起作用
|
3
ThinkTwive OP 要是手动进入镜像的话我知道可以通过--privileged 参数来解决,现在在 Dockerfile 里面。我真的抓瞎了。
|
4
zunceng 2019-11-14 18:58:06 +08:00
docker 官方文档里面就有 postgresql 的例子 不需要自己写呀
|
5
ThinkTwive OP @zunceng emmm 这个镜像是公司产品的镜像,然后这个产品的安装需要数据库启动。。。所以才要执行这一步
|
6
zunceng 2019-11-14 19:53:08 +08:00 1
放在 entrypoint 里面做吧 可能要加个判断 第二次启动的时候跳过安装
|
7
jaynos 2019-11-14 20:31:25 +08:00 1
可以看下官方的这一行代码
https://github.com/docker-library/postgres/blob/master/11/alpine/docker-entrypoint.sh#L48 原理就是在起容器的时候再做初始化工作(执行 entrypoint) |
8
ThinkTwive OP |
9
jaynos 2019-11-15 10:19:45 +08:00
@ThinkTwive #8
官方改代码了, 可以看下旧版的, 比较简单 https://github.com/docker-library/postgres/blob/45b855af13/11/alpine/docker-entrypoint.sh#L48 |
10
ThinkTwive OP @jaynos 十分感谢。感觉一个坑接着一个坑。公司内网,感觉里面好多代码都操作不了。想直接用官方的数据库镜像,发现公司产品只支持 centos7 和 suse11。感觉要崩溃了,我仔细研究下 gosu 怎么用吧。su-exec 没有这个命令,我又试了下 sudo su - postgres,发现还是不行
|
11
jaynos 2019-11-15 12:46:38 +08:00
|
12
ThinkTwive OP @jaynos 公司里面这些都上不去。。在上面做了,也传不到公司的服务器上。我现在离线装了个 gosu。然后使用
gosu postgres:dba pg_ctl start。很确定这个组名就是安装数据库的那个组名和用户名。但是还是提示 database dictionary 没有 initial。然后我自己 initial,又提示我,初始化失败,缺少 ascii_and_mic 文件。。。 感觉用户组名都一样怎么会打不开呢。是不是 gosu 的语法我理解错了 |