GitLab Pipeline部署容器:无运行容器时docker rm报错的解决咨询
解决GitLab Pipeline部署时Docker无容器报错问题
问题根源很明确:当目标服务器没有运行中的容器时,docker ps -aq没有输出内容,xargs会直接调用docker rm但不传入任何参数,触发"docker rm requires at least 1 argument"错误。以下是两种可行的修改方案:
方案一:给xargs添加空输入判断参数
利用xargs的--no-run-if-empty参数,当管道中没有输入内容时,xargs不会执行后续的docker命令,避免无参数调用:
deploy: stage: deploy before_script: - chmod 400 $SSH_KEY script: - ssh -o StrictHostKeyChecking=no -i $SSH_KEY root@161.35.223.117 " docker login -u $REGISTRY_USER -p $REGISTRY_PASS && docker ps -aq | xargs --no-run-if-empty docker stop | xargs --no-run-if-empty docker rm && docker run -d -p 5000:5000 $IMAGE_NAME:$IMAGE_TAG"
方案二:通过条件判断执行命令
先检查是否存在容器ID输出,仅当有容器时才执行停止和删除操作,兼容性更强:
deploy: stage: deploy before_script: - chmod 400 $SSH_KEY script: - ssh -o StrictHostKeyChecking=no -i $SSH_KEY root@161.35.223.117 " docker login -u $REGISTRY_USER -p $REGISTRY_PASS && if [ -n \"$(docker ps -aq)\" ]; then docker ps -aq | xargs docker stop | xargs docker rm fi && docker run -d -p 5000:5000 $IMAGE_NAME:$IMAGE_TAG"
两种方案都能解决无容器时的报错问题,方案一更简洁,方案二对不同环境的xargs兼容性更好,可根据实际情况选择。
内容的提问来源于stack exchange,提问作者PeterMeter
相关产品推荐
相关产品推荐

