当前位置: 首页 > 面试题库 >

Dockerfile无法更改用户访问权限

张智
2023-03-14
问题内容

我想在docker上运行jenkins并更改用户访问权限,以便可以读取SSH密钥并访问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种方式中的任何一种来解决此问题

  1. 您可以在构建之前在主机上修复权限,它应该可以工作。

  2. 您可以使用多阶段构建,更改权限并从第一阶段复制文件

    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
  1. 您可以将临时目录中的文件复制和更改为构建的一部分。作为启动脚本(入口点)的一部分,您可以将它们从临时目录复制到实际目录。


 类似资料:
  • 我正在通过adal节点库使用microsoft登录验证我的网页的用户。 adal-node有一个,我们可以使用

  • 我使用Spring Security Core插件生成了Role、User和UserRole类。我想直接在User-Create-Process中设置users角色。我在User中添加了一个“role”字段,但不知道应该如何在UserRole中设置该条目。 还有什么要实现的,比如重新验证,以更新用户角色吗?

  • 问题内容: 这是一些使用Java 6编译但未在Java 7中编译的代码的简单示例。 在Java 7中,它无法在该方法中编译,并显示以下错误: 错误:_myVar在测试中具有私有访问权限 我不明白为什么它不再编译- 在我看来应该如此。变量是类型,必须扩展。它试图从class内访问实例的字段。 确实,如果我将方法更改为以下方法,则它将编译(没有警告): 为什么这不再编译? 这是Java 6中的错误吗?

  • 我想连接到邮箱并下载附件。有什么方法可以接收clientID、tenantID的身份验证吗?有提供商吗?没有用户交互就能得到一个令牌?

  • 我想使用gsutil和服务帐户在命令行上访问Goolge播放报告。有一个云存储URI,格式为gs://bucket\u name,我可以用我的用户帐户列出和下载报告,但不能用我创建的服务帐户。错误总是相同的: 我已向服务帐户授予了所有必需的权限,因此我不明白为什么用户帐户可以使用,而服务帐户却无法使用。 所以如果你知道如何帮助我,我会非常感谢你。

  • 我跟着怎么移动elasticsearch数据目录?并重新启动elasticsearch时,出现错误。 我的elasticsearch版本是ElasticSearch-5.6.1。下面是我的登录/var/log/elasticsearch java.lang.IllegalStateException:无法在org.ellasticsearch.bootstrap.security.addPath(