如何使用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。