如何使用Shell脚本重新启动Docker服务
- 我有在Docker容器中运行的
Node
服务- 由于以下exception服务会在一段时间后停止。
events.js:141 throw er; // Unhandled 'error' event Error: read ECONNRESET at exports._errnoException (util.js:870:11) at TLSWrap.onread (net.js:544:26)
- 我不知道为什么这个例外即将到来。
- 我正在寻找可以重新启动服务的工作。
- 我正在使用
shell
文件来运行这些服务,所以有什么我可以添加在shell文件,可以重新启动这个停止的服务。
以下是我的shell文件的示例:
#!/bin/bash ORGANISATION="$1" SERVICE_NAME="$2" VERSION="$3" ENVIRONMENT="$4" INTERNAL_PORT_NUMBER="$5" EXTERNAL_PORT_NUMBER="$6" NETWORK="$7" docker build -t ${ORGANISATION}/${SERVICE_NAME}:${VERSION} --build-arg PORT=${INTERNAL_PORT_NUMBER} --build-arg ENVIRONMENT=${ENVIRONMENT} --no-cache . docker stop ${SERVICE_NAME} docker rm ${SERVICE_NAME} sudo npm install sudo npm install -g express docker run -p ${EXTERNAL_PORT_NUMBER}:${INTERNAL_PORT_NUMBER} --network ${NETWORK} --restart always --name ${SERVICE_NAME} -itd ${ORGANISATION}/${SERVICE_NAME}:${VERSION}
这是我的Dockerfile
FROM ubuntu ARG ENVIRONMENT ARG PORT ENV PORT $PORT ENV ENVIRONMENT $ENVIRONMENT RUN apt-get update -qq RUN apt-get install -y build-essential nodejs npm nodejs-legacy vim RUN mkdir /database_service ADD . /database_service WORKDIR /database_service RUN npm install -g path RUN npm cache clean EXPOSE $PORT ENTRYPOINT [ "node", "server.js" ] CMD [ $PORT, $ENVIRONMENT ]
提前致谢。
你可以使用docker run --restart always ...
然后,Docker会在每次停止时重新启动容器。
该错误来自tcp连接突然closures,可能来自数据库或websocket。
我不知道你为什么在你的脚本中使用npm,因为它在容器之外。 如果您希望将其安装在容器中,请将其添加到Dockerfile中的RUN
中。
也许看看docker-compose吧。 有了它,你可以在docker-compose.yml
文件中编写你的configuration文件,只需使用docker-compose.yml
docker-compose up --build
docker-compose.yml
,并具有与此脚本相同的function。