docker文件中的脚本未运行

docker文件中的脚本未运行,docker,shell,next.js,Docker,Shell,Next.js,我需要从Docker内部执行一个shell脚本。我在Docker或脚本方面不如我想的那么精通。该脚本无效,不会在屏幕上打印任何内容。我不相信有人叫它 我做错了什么 该脚本应作为entrypoint命令运行 剧本 #!/usr/bin/env bash set -Ex function apply_path { echo "Check that we have ENVIRONMENT_VAR vars" test -n "$ENVIRONMENT_

我需要从Docker内部执行一个shell脚本。我在Docker或脚本方面不如我想的那么精通。该脚本无效,不会在屏幕上打印任何内容。我不相信有人叫它

我做错了什么

该脚本应作为entrypoint命令运行

剧本

#!/usr/bin/env bash
set -Ex

function apply_path {

    echo "Check that we have ENVIRONMENT_VAR vars"
    test -n "$ENVIRONMENT_VAR"

    find /usr/src/app/.next \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i "s#NEXT_PUBLIC_ENVIRONMENT_VAR#$ENVIRONMENT_VAR#g"
}

apply_path
echo "Starting Nextjs"
exec "$@"
docker文件

ARG NODE_VERSION=14.4.0-alpine

###
# STAGE 1: Base
###
FROM node:$NODE_VERSION as base

ENV NODE_PATH=/src
WORKDIR $NODE_PATH

###
# STAGE 2: Build
###
FROM base as build

COPY package.json package-lock.json .npmrc ./
RUN npm i

COPY . ./

RUN NEXT_PUBLIC_ENVIRONMENT_VAR=BUILD npm run build

# Permisions to execute script
RUN ["chmod", "+x", "./entrypoint.sh"]
ENTRYPOINT ["./entrypoint.sh"]



###
# STAGE 3: Production
###
FROM node:$NODE_VERSION

ENV NODE_PATH=/src
ENV APP_PORT=3000

WORKDIR $NODE_PATH

COPY --from=build $NODE_PATH/.next ./.next
COPY --from=build $NODE_PATH/node_modules ./node_modules
COPY --from=build $NODE_PATH/src ./src
COPY --from=build $NODE_PATH/package.json ./
COPY --from=build $NODE_PATH/.babelrc ./
COPY --from=build $NODE_PATH/LICENSE ./

EXPOSE $APP_PORT

CMD npm start

当您有一个多阶段Docker构建时,其最终结果只是从最后的
from
行开始的结果。当您将该脚本设置为
入口点时,它处于上一个构建阶段,无法使用
ENTRYPOINT
(和
CMD
)不在映像生成时运行,只有在最终运行生成的映像时才运行

解决此问题的最简单方法是
将脚本直接复制到最终构建阶段:

#第三阶段:生产
来自节点:$node\u版本
...
复制entrypoint.sh。
入口点[“/”入口点.sh“]
CMD npm启动

这对运行文件有效。我还必须将bash添加到容器中。