我有一个尝试创建docker镜像的管道,将其上传到docker hub,然后我通过SSH连接到一个EC2实例并运行一个shell脚本,该脚本将下载镜像并启动一个容器。
问题是,当shell脚本完成下载docker镜像并尝试启动容器时,管道认为部署成功。但是,容器可能有问题(它是Node JS应用程序,有时会有错误阻止它进行编译)。
理想情况下,我希望添加到shell脚本中,以便管道检查以确保容器确实已启动并正在运行。
下面是到目前为止的脚本。我在考虑拉取新启动的容器的状态,看看它是否正在运行或状态为退出代码(1)。我知道镜像,但无法获取容器ID (这不起作用:Get docker container id from container name )
或者有没有更好的方法来做到这一点?
echo "Starting Docker container replacement script"
ENV=$1
USERNAME=$2
echo "this is the env: ${ENV}"
if [ $ENV = "dev" ]; then
PORT=9111
CMD="npm run dev"
elif [ $ENV = "dev2" ]; then
PORT=9222
CMD="npm run dev2"
elif [ $ENV = "dev3" ]; then
PORT=9333
CMD="npm run dev3"
else
echo "ERROR: No valid environment parameter was passed"
exit 1
fi
for i in $(docker ps -a -q --filter ancestor=someaccount/registry:$ENV); do docker rm $(docker stop $i); done
docker rmi someaccount/registry:$ENV
cat docker_pass.txt | docker login -u $USERNAME --password-stdin
docker pull someaccount/registry:$ENV
docker run -p $PORT:7665 -d someaccount/registry:$ENV $CMD
echo "Finishing script"发布于 2019-08-13 03:45:08
您可以将Healthcheck添加到Docker镜像中。如果您不想将它放在映像中,也可以在命令行上指定它。基本上,这告诉Docker要运行什么命令,以及检查容器是否仍然正常工作的频率。
例如,从文档中,您可以使用以下内容检查容器中的网站是否每5分钟启动一次:
运行状况检查--时间间隔=5M--超时=3s\ CMD curl -f http://localhost/ ||退出1
然后,您可以检查运行状况:
docker inspect --format='{{json .State.Health}}' <container-id>
当您使用-d标志运行docker时,它会将容器id输出到标准输出。
https://stackoverflow.com/questions/57466799
复制相似问题