当ssh上的shell脚本创建docker容器时是否可以抛出错误

时间:2019-08-12 18:59:18

标签: docker bitbucket-pipelines

我有一个尝试创建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"

1 个答案:

答案 0 :(得分:1)

您可以向Docker映像添加Healthcheck。如果您不想将其放入映像中,也可以在命令行上指定它。基本上,这告诉Docker运行什么命令以及检查容器是否仍然正常工作的频率。

例如,从文档中,您可以每5分钟检查一次容器中的网站是否显示以下内容:

HEALTHCHECK --interval=5m --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

然后您可以检查运行状况:

docker inspect --format='{{json .State.Health}}' <container-id>

使用-d标志运行docker时,它将容器ID输出到标准输出。