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

2024-01-19

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

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.

我进入容器,docker-entrypoint.sh 的权限是:

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

三个问题:

  1. 我的 bash 脚本语法是否错误?

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

  3. 在入口点中运行多个 git 命令而不使用 bash 脚本的最佳方法是什么?

Thanks.


  1. “权限被拒绝”阻止您的脚本被调用at all。因此,唯一可能相关的语法是第一行(“shebang”),它应该看起来像#!/usr/bin/env bash, or #!/bin/bash,或类似的,具体取决于您的目标的文件系统布局。

  2. 最有可能的是文件系统权限未设置为允许执行。 shebang 也可能引用了不可执行的内容,但这是far不太可能。

  3. 因修复先前问题的方便性而提出。


简单的阅读

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(明确记录以保留元数据)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运行 bash 脚本的 docker 入口点得到“权限被拒绝” 的相关文章

随机推荐