删除现有的 docker 容器/镜像 GitLab CI

wma*_*ash 7 docker gitlab-ci

我有一个包含 3 个步骤的 GitLab CI 管道:

  • build
  • release
  • deploy

在我的deploy脚步中,我;通过 SSH 进入我的 DO 框,登录 GitLab 注册表,下载最新的 docker 镜像并运行它。我还尝试使用以下方法删除现有的容器/图像:

docker rm -f $(docker ps -aq)
docker rmi $(docker images -q)
Run Code Online (Sandbox Code Playgroud)

.gitlab.yml

cache:
  key: "${CI_COMMIT_REF_NAME} node:latest"
  paths:
    - node_modules/

stages:
  - build
  - release
  - deploy

build:
  ...

release:
  ...

deploy:
  stage: deploy
  image: gitlab/dind:latest
  only:
    - master
  environment: production
  when: manual
  before_script:
    - mkdir -p ~/.ssh
    - echo "${DEPLOY_SERVER_PRIVATE_KEY}" | tr -d '\r' > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - eval "$(ssh-agent -s)"
    - ssh-add ~/.ssh/id_rsa
    - ssh-keyscan -H ${DEPLOYMENT_SERVER_IP} >> ~/.ssh/known_hosts
  script:
    - ssh root@${DEPLOYMENT_SERVER_IP}
      "echo 'CONTAINERS';
      docker ps -aq;
      echo 'IMAGES';
      docker images -q;
      docker rm -f $(docker ps -aq);
      docker rmi $(docker images -q);
      docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY};
      docker pull ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest;
      docker run -d ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest;"
Run Code Online (Sandbox Code Playgroud)

在尝试删除容器/映像 ID 之前,我会注销它们的结果。该构建步骤的 (部分)输出是:在此输入图像描述

您可以看到该docker ps -aq命令注销了1 个现有容器 ID,并docker images -q注销了4 个现有映像 ID。为什么我会收到以下错误:

“docker rm”需要至少 1 个参数

...和...

“docker rmi”需要至少 1 个参数

当我可以看到存在现有容器/图像时?

Adi*_*iii 4

看起来像是 subshel​​l 的问题,但xargs如果 gitlib 中的 subshel​​l 存在问题,您可以尝试一下。

      echo 'IMAGES';
      docker images -q;
      docker ps -aq | xargs docker rm -f;
      docker images -q | xargs docker rmi;
Run Code Online (Sandbox Code Playgroud)