一尘不染

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

docker

我正在尝试对我的node.js应用进行docker化。构建容器时,我希望它运行a 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. 在不使用bash脚本的情况下在入口点运行多个git命令的最佳方法是什么?

谢谢。


阅读 1215

收藏
2020-06-17

共1个答案

一尘不染

  1. 拒绝“权限”避免你的脚本被调用 在所有 。因此,唯一可能与之相关的语法是第一行(“ shebang”)的语法,根据目标文件系统的布局,其外观应类似于#!/usr/bin/env bash,或#!/bin/bash或类似。

  2. 文件系统权限很可能未设置为允许执行。这也有可能是家当引用的东西是不是可执行文件,但这是 远远 不太可能。

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

2020-06-17