我有一个包括3个步骤的GitLab CI流水线:
build
release
deploy
在我的deploy
步骤中,我会通过SSH进入我的DO服务器,登录到GitLab注册表,拉取最新的Docker镜像并运行它。我还尝试使用以下命令来删除现有的容器/镜像:
docker rm -f $(docker ps -aq)
docker rmi $(docker images -q)
.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;"
在我尝试删除容器/镜像之前,我会记录它们的ID。该构建步骤的(部分)输出如下所示: 您可以看到
docker ps -aq
命令记录了1个现有容器ID,而docker images -q
记录了4个现有镜像ID。那么为什么我还会收到以下错误:
"docker rm"需要至少一个参数
...和...
当我能看到存在容器/镜像时?"docker rmi"需要至少一个参数
prune
只会删除已停止的容器,在部署时,我的先前容器仍在运行。 - wmash