bash - Dockerfile 更改用户访问失败

标签 bash docker jenkins dockerfile

我想在 docker 上运行 jenkins 并更改用户访问权限,以便可以读取 SSH key 并访问 git。
这是 dockerfile 的示例

FROM jenkins/jenkins:lts

USER root 

COPY --chown=jenkins:jenkins id_rsa $JENKINS_HOME/.ssh/id_rsa
COPY --chown=jenkins:jenkins id_rsa.pub $JENKINS_HOME/.ssh/id_rsa.pub
RUN /bin/bash -c 'ls -la $JENKINS_HOME/.ssh; chmod 600 -R $JENKINS_HOME/.ssh; ls -la $JENKINS_HOME/.ssh'

构建时的输出是成功的,访问已更改!
Step 3/3 : RUN /bin/bash -c 'ls -la $JENKINS_HOME/.ssh; chmod 600 -R $JENKINS_HOME/.ssh; ls -la $JENKINS_HOME/.ssh'
 ---> Running in 137d1a4f9f6d
total 16
drwxr-xr-x 2 jenkins jenkins 4096 Jan  8 04:11 .
drwxr-xr-x 3 jenkins jenkins 4096 Jan  8 04:11 ..
-rwxr-xr-x 1 jenkins jenkins 1843 Jan  2 02:33 id_rsa
-rwxr-xr-x 1 jenkins jenkins  413 Jan  2 02:33 id_rsa.pub
total 16
drw------- 2 jenkins jenkins 4096 Jan  8 04:11 .
drwxr-xr-x 3 jenkins jenkins 4096 Jan  8 04:11 ..
-rw------- 1 jenkins jenkins 1843 Jan  2 02:33 id_rsa
-rw------- 1 jenkins jenkins  413 Jan  2 02:33 id_rsa.pub
Removing intermediate container 137d1a4f9f6d
 ---> 7d6334d2b044

然而,当我进入 /bin/bash访问设置为默认值,chmod 不起作用
jenkins@f49048ec8c88:/$ ls -al /var/jenkins_home/.ssh/
total 16
drwxr-xr-x  2 jenkins jenkins 4096 Jan  8 04:25 .
drwxr-xr-x 16 jenkins jenkins 4096 Jan  8 04:26 ..
-rwxr-xr-x  1 jenkins jenkins 1843 Jan  2 02:33 id_rsa
-rwxr-xr-x  1 jenkins jenkins  413 Jan  2 02:33 id_rsa.pub

知道为什么会这样吗?

最佳答案

发生这种情况是因为 $JENKINS_HOME定义为 VOLUMEjenkins:lts基础图像。您可以通过以下 3 种方式中的任何一种来解决此问题

  • 您可以在构建之前修复主机上的权限,它应该可以工作。
  • 您可以使用多阶段构建,更改权限并从第一阶段复制文件
  • FROM jenkins/jenkins:lts as base
    USER root
    COPY --chown=jenkins:jenkins id_rsa /tmp/ssh_keys/
    COPY --chown=jenkins:jenkins id_rsa.pub  /tmp/ssh_keys/
    RUN chmod 600 -R /tmp/ssh_keys
    
    FROM jenkins/jenkins:lts
    USER root
    COPY --chown=jenkins:jenkins --from=base /tmp/ssh_keys $JENKINS_HOME/.ssh
    
  • 作为构建的一部分,您可以复制和更改临时目录中文件的权限。作为启动脚本(入口点)的一部分,您可以将它们从临时目录复制到实际目录。
  • 关于bash - Dockerfile 更改用户访问失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59639560/

    相关文章:

    bash 在 while 循环中吃字符

    bash - s3cmd sync 将错误的文件远程复制到错误的位置

    postgresql - 无法连接到 PostgreSQL docker 镜像(使用转发端口)

    当计时器触发时,Jenkins 不会启动 "post build"操作

    grails - 如果以String参数开头,则Grails失败

    bash - 如何在 hadoop 映射器中使用 shell 脚本获取值

    bash - bash 函数可以在不同的脚本中使用吗?

    docker - 配置Docker守护程序日志

    docker - 无法在 Alpine 上安装 uwsgi

    java - 在 Jenkins 中获取过时版本的 Maven 项目资源