Docker 容器不断退出

Docker 容器不断退出

Dockerfile 的内容:

FROM scardon/ruby-node-alpine:latest

WORKDIR /opt
COPY ./docker/docker-entrypoint.sh /usr/bin/

RUN apk update \
  && apk add --no-cache --virtual .build_deps \
  && apk add --no-cache --virtual .run_deps python make \
  && gem install slim \
  && npm i -g gulp-cli gulp \
  && apk del .build_deps \
  && chmod +x /usr/bin/docker-entrypoint.sh

EXPOSE 3000
VOLUME [ "/opt" ]

CMD ["docker-entrypoint.sh"]

docker-entrypoint.sh的内容:

#!/usr/bin/env sh

exec npm i
exec npm run start

当我尝试以前台模式运行容器时:

docker run --rm -p 3000:3000 -v ~/Sites/app:/opt imagename

它触发npm i命令并退出。如何保持npm run start在后台,以便它将一直运行。

Patok 的更新:

exec node /var/www/project/backend/server.js > /var/log/node-server.log &
exec /usr/sbin/nginx -g "daemon off;"
exec tail -f /var/log/nginx/project.error.log & tail -f /var/log/node-server.log

答案1

在脚本中使用多个exec语句是不可能的,因为它用之后运行的命令替换当前进程exec。你可以使用这个:

#!/usr/bin/env sh

npm i
exec npm run start

或者npm i在此 shell 脚本之外运行(即直接在 Dockerfile 的 RUN 指令中运行)。

相关内容