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 指令中运行)。