首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当ssh上的shell脚本创建docker容器时,我可以抛出错误吗?

当ssh上的shell脚本创建docker容器时,我可以抛出错误吗?
EN

Stack Overflow用户
提问于 2019-08-13 02:59:18
回答 1查看 125关注 0票数 0

我有一个尝试创建docker镜像的管道,将其上传到docker hub,然后我通过SSH连接到一个EC2实例并运行一个shell脚本,该脚本将下载镜像并启动一个容器。

问题是,当shell脚本完成下载docker镜像并尝试启动容器时,管道认为部署成功。但是,容器可能有问题(它是Node JS应用程序,有时会有错误阻止它进行编译)。

理想情况下,我希望添加到shell脚本中,以便管道检查以确保容器确实已启动并正在运行。

下面是到目前为止的脚本。我在考虑拉取新启动的容器的状态,看看它是否正在运行或状态为退出代码(1)。我知道镜像,但无法获取容器ID (这不起作用:Get docker container id from container name )

或者有没有更好的方法来做到这一点?

代码语言:javascript
复制
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"
EN

回答 1

Stack Overflow用户

发布于 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输出到标准输出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57466799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档