使用 docker 文件运行脚本文件 (.sh) 时权限被拒绝

Posted

技术标签:

【中文标题】使用 docker 文件运行脚本文件 (.sh) 时权限被拒绝【英文标题】:Permission denied while running a script file (.sh) with a docker file 【发布时间】:2021-10-26 20:42:25 【问题描述】:

我想做的是, 我使用 Ubuntu 作为基础镜像创建了一个 docker 文件,

ARG VERSION
FROM ubuntu:18.04

COPY configs/base.properties /root/base.properties

此属性文件包含一些配置,Dockerfile 只是将其复制到容器中。 (假设我将此图像标记为configimage:1.0

然后我创建了第二个 docker 文件,它使用上面的 docker 镜像作为基础镜像。 (假设我将其标记为midbase:1.0

FROM configimage:1.0

COPY resource/bootstrap.sh .

RUN ["chmod", "a+x", "bootstrap.sh"]

CMD ["ls"]

脚本文件所做的只是将我在上一个图像中复制的配置复制到容器中的单独位置。

#!/bin/bash

mkdir -p ~/configs

cp --archive ~/root/base.properties ~/configs/base.properties

echo "Configs copied"

我添加了ls 命令来检查该文件夹是在容器中创建的(在midbase:1.0 中),但我注意到configs 文件夹不是在midbase:1.0 容器中创建的。

你有什么技巧可以解决这个问题吗?

【问题讨论】:

~/root/base.properties 不一定是与/root/base.properties 相同的路径。这是故意的吗? --- 一般来说,我建议不要使用像~/something 这样的路径,而是使用绝对路径或设置WORKDIR 并使用相对路径。 啊哈!!感谢您的输入。我会试试的。 :) soo... 有帮助吗? 你没有在任何地方运行bootstrap.sh 【参考方案1】:

试试下面的

RUN ["sh", "bootstrap.sh"]

【讨论】:

嗨 Akash 我确实尝试过,将其更改为 RUN ["sh", "bootstrap.sh"] 然后再次构建它 - docker build -t midbase:1.2 。然后运行它 - docker run midbase:1.2 但它只给出了这个输出 || bin bootstrap.sh etc lib media opt root sbin sys usr boot dev home lib64 mnt proc run srv tmp var ||未创建 configs 文件夹:/ 在 shell 脚本运行后你是否看到“已复制配置”消息? 不,我也没有看到。 :// ls 似乎显示了/ 的内容,这是您预期的configs 目录吗? 啊是啊! :) @sborsky

以上是关于使用 docker 文件运行脚本文件 (.sh) 时权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

sh 此脚本清除Docker.qcow2文件,该文件使用Docker For Mac占用大量磁盘空间。您可以指定一些您想要的Docker镜像

sh 此脚本清除Docker.qcow2文件,该文件使用Docker For Mac占用大量磁盘空间。您可以指定一些您想要的Docker镜像

如何在 Alpine Docker 容器中运行 Bash 脚本?

sh 用于将所有docker镜像备份到文件的bash脚本

docker第三次任务bash脚本,chomd权限

使用Docker部署GitLab