当前位置: 首页 > 知识库问答 >
问题:

运行bash脚本的docker入口点获得“权限被拒绝”

史默
2023-03-14

我正在尝试对node.js应用程序进行dockerize。构建容器时,我希望它运行一个git克隆,然后启动节点服务器。因此,我将这些操作放在.sh脚本中。并将脚本作为入口点中的单个命令运行:

FROM ubuntu:14.04

RUN apt-get update && apt-get install -y build-essential libssl-dev gcc curl npm git

#install gcc 4.9
RUN apt-get install -y software-properties-common python-software-properties
RUN add-apt-repository -y ppa:ubuntu-toolchain-r/test
RUN apt-get update
RUN apt-get install -y libstdc++-4.9-dev

#install newst nodejs
RUN curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
RUN apt-get install -y nodejs

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

ADD package.json /usr/src/app/
RUN npm install

ADD docker-entrypoint.sh /usr/src/app/

EXPOSE 8080

ENTRYPOINT ["/usr/src/app/docker-entrypoint.sh"] 

我的docker-entrypoint.sh如下所示:

git clone git@<repo>.git
git add remote upstream git@<upstream_repo>.git

/usr/bin/node server.js

构建此映像并运行后:

docker run --env NODE_ENV=development -p 8080:8080 -t -i <image>

我得到:

docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.

I将外壳放入容器中,docker-entrypoint.sh的权限为:

-rw-r--r-- 1 root root 292 Aug 10 18:41 docker-entrypoint.sh

三个问题:

>

如何在将bash文件添加到图像之前更改其权限?

在entrypoint中运行多个git命令而不使用bash脚本的最佳方式是什么?

谢谢

共有3个答案

苏健柏
2023-03-14

我也面临同样的问题

ENTRYPOINT ["sh", "/docker-entrypoint.sh"]

对于原始问题中的Dockerfile,它应该是这样的:

ENTRYPOINT ["sh", "/usr/src/app/docker-entrypoint.sh"]
拓拔泉
2023-03-14

可执行文件需要具有执行集的权限才能执行。

在构建docker映像的计算机中(不在docker映像内部),尝试运行:

ls -la path/to/directory

可执行文件(在本例中为docker entrypoint.sh)输出的第一列应将可执行文件位设置为:

-rwxrwxr-x

如果没有,请尝试:

chmod +x docker-entrypoint.sh

然后再次建立你的docker形象。

Docker使用自己的文件系统,但它从源目录复制所有内容(包括权限位)。

沈英勋
2023-03-14

>

很可能文件系统权限未设置为允许执行。也有可能sheang引用了一些不可执行的东西,但这种可能性要小得多。

讨论了修复先前问题的难易性。

简读

docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.

...脚本没有被标记为可执行。

RUN ["chmod", "+x", "/usr/src/app/docker-entrypoint.sh"]

将在容器中解决此问题。或者,您可以确保Dockerfile引用的本地副本是可执行的,然后使用copy(明确记录以保留元数据)。

 类似资料:
  • 问题内容: 我正在尝试对我的node.js应用进行docker化。构建容器时,我希望它运行a ,然后启动节点服务器。因此,我将这些操作放在.sh脚本中。并在ENTRYPOINT中将脚本作为单个命令运行: 我的docker-entrypoint.sh看起来像这样: 构建此映像并运行后: 我越来越: 我将其装入容器,并且docker-entrypoint.sh的许可为: 三个问题: 我的bash脚本语

  • 问题内容: 运行后: 我收到以下错误: 在数据库中进行更改后尝试运行迁移。任何建议将不胜感激。 问题答案: 你需要使可执行文件才能执行它。做使其可执行。另外,你可以代替。

  • 我添加了使用权限,包括WRITE_EXTERNAL_STORAGE,android.permission.相机,READ_EXTERNAL_STORAGEAndroidManifest.xml. 当我在Nexus6(API 24)中运行我的应用程序时,它向我抛出了以下错误: java.io.IOException:权限被拒绝 这是我的代码: 如何在权限相机运行时打开之前使用它?

  • 问题内容: 我在装有Ubuntu OS的计算机上安装了Docker。在安装docker之后,当我运行时 没关系,但是我想隐藏单词以使命令更短。 如果我写的命令没有这个词 显示以下内容: 当我尝试制作时也是如此 我该如何解决? 问题答案: 如果要以非root用户身份运行docker,则需要将其添加到docker组。 创建docker组(如果不存在) $ sudo groupadd docker 将您

  • Docker安装在AWS EC2 Ubuntu 16.04实例上,如下所示: 引发权限被拒绝错误: 尝试连接到处的Docker守护程序套接字时,权限被拒绝unix:///var/run/docker.sock: 收到http:///var/run/docker.sock/v1.39/info: 拨号unix/var/run/docker.sock:connect:权限被拒绝 显示: uname-a

  • 我正在使用Docker Compose运行多个容器,包括一个带有Postgres映像的容器。我正在尝试向该容器添加一个卷,以跨容器构建持久化我的数据。但是,当它尝试在容器中为该卷创建目录时,我收到了一个错误。 我运行: 然后 docker compose up 我收到以下错误: 错误:对于cxbenchmark\u db\u 1,无法启动服务db:oci运行时错误:container\u linu