V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ThinkTwive
V2EX  ›  Docker

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

  •  
  •   ThinkTwive · 2019-11-14 18:35:22 +08:00 · 9080 次点击
    这是一个创建于 1838 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 18:40:25 +08:00
    USER root
    RUN ...
    USER <原来的用户,详见 pgsql:v1>
    ThinkTwive
        2
    ThinkTwive  
    OP
       2019-11-14 18:43:30 +08:00
    @jybox 感谢回答,加上过 root,但还是不起作用
    ThinkTwive
        3
    ThinkTwive  
    OP
       2019-11-14 18:44:51 +08:00
    要是手动进入镜像的话我知道可以通过--privileged 参数来解决,现在在 Dockerfile 里面。我真的抓瞎了。
    zunceng
        4
    zunceng  
       2019-11-14 18:58:06 +08:00
    docker 官方文档里面就有 postgresql 的例子 不需要自己写呀
    ThinkTwive
        5
    ThinkTwive  
    OP
       2019-11-14 19:43:26 +08:00 via Android
    @zunceng emmm 这个镜像是公司产品的镜像,然后这个产品的安装需要数据库启动。。。所以才要执行这一步
    zunceng
        6
    zunceng  
       2019-11-14 19:53:08 +08:00   ❤️ 1
    放在 entrypoint 里面做吧 可能要加个判断 第二次启动的时候跳过安装
    jaynos
        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)
    ThinkTwive
        8
    ThinkTwive  
    OP
       2019-11-14 20:54:04 +08:00
    @jaynos 感谢指导。对 entrypoint 还不太了解。我使用 entrypoint 时"su","-","postgres"分别是三个参数。可以执行,但是需要输入密码,输入密码后还是提示权限有问题
    @zunceng 好的,感谢指导,我仔细看看这个代码。
    jaynos
        9
    jaynos  
       2019-11-15 10:19:45 +08:00
    ThinkTwive
        10
    ThinkTwive  
    OP
       2019-11-15 11:25:25 +08:00
    @jaynos 十分感谢。感觉一个坑接着一个坑。公司内网,感觉里面好多代码都操作不了。想直接用官方的数据库镜像,发现公司产品只支持 centos7 和 suse11。感觉要崩溃了,我仔细研究下 gosu 怎么用吧。su-exec 没有这个命令,我又试了下 sudo su - postgres,发现还是不行
    jaynos
        11
    jaynos  
       2019-11-15 12:46:38 +08:00
    @ThinkTwive #10

    docker 和什么宿主机没关系呀? 想自己编译镜像可以阿里云开个几小时的按时付费香港实例 1c2g, 大概一小时 2 毛钱
    ThinkTwive
        12
    ThinkTwive  
    OP
       2019-11-15 17:37:53 +08:00
    @jaynos 公司里面这些都上不去。。在上面做了,也传不到公司的服务器上。我现在离线装了个 gosu。然后使用
    gosu postgres:dba pg_ctl start。很确定这个组名就是安装数据库的那个组名和用户名。但是还是提示 database dictionary 没有 initial。然后我自己 initial,又提示我,初始化失败,缺少 ascii_and_mic 文件。。。
    感觉用户组名都一样怎么会打不开呢。是不是 gosu 的语法我理解错了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1634 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:51 · PVG 00:51 · LAX 08:51 · JFK 11:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.