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



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

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

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

以下是到目前为止的脚本。我正在考虑提取新启动的容器的状态,看看它是否正在运行或将退出代码 (1) 作为状态。我知道映像,但无法获取容器 ID(这不起作用:从容器名称获取 docker 容器 ID)

还是有更好的方法可以做到这一点?

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"

您可以向 Docker 映像添加运行状况检查。 如果您不想将其放在映像中,也可以在命令行上指定。 基本上,这告诉 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 输出到标准输出。

相关内容

最新更新