簡體   English   中英

使用 docker-compose.yml 自動刪除容器

[英]Auto remove container with docker-compose.yml

docker-compose run有一個標志--rm可以在運行后自動刪除容器。 我想知道是否有針對特定服務的等效配置 docker-compose.yml,因為我在 yml 中獲得的服務之一是一次性構建過程,它應該只是 output 編譯文件並自行消失。

我還沒有找到任何選項來幫助您在docker-compose.yml文件中定義此行為,我認為解釋如下:

docker-compose up構建、(重新)創建、啟動和附加到服務的容器。

由於您的images已構建且服務的containers已啟動,因此您可以使用docker-compose stopdocker-compose start來啟動/停止您的服務。 這與docker-compose down不同:

停止容器並刪除由up創建的容器、網絡、卷和圖像。

您嘗試執行的操作存在問題:

如果你docker-compose up並且你的一個容器完成了它的任務並被(自動)刪除,那么你不能docker-compose stopdocker-compose start再次。 移除的容器將無法再次start


你可能想看看:

只需運行docker-compose up && docker-compose rm -fsv 🙂

👉 https://docs.docker.com/compose/reference/rm

這個問題發布已經有一段時間了,但我認為在 2022 年分享一些對我的案例有用的東西會提供一些信息:)但是請記住,這個解決方案仍然不會像原作者打算的那樣刪除舊容器實現。

docker-compose up --force-recreate -V

就我而言,我有一個小型 Redis 集群,我希望在停止服務器后完全刪除其中的數據。 僅使用--force-recreate並不能解決問題,因為匿名卷仍在重復使用。 這就是-V進來的地方。

我對此的解決方案是創建一個小 bash 腳本,該腳本隨后會自動刪除容器。

如果您使用的是 macOS,則可以將此腳本放在usr/local/bin 假設它名為dco ,那么您可以運行chmod +x usr/local/bin/dco使其可執行。 在 Windows 上,我不知道如何讓它工作,但在 Linux 上應該是類似的。

#! /bin/bash

# check for -d, --detached
DETACHED=false
for (( i=1; i <= "$#"; i++ )); do
  ARG="${!i}"
  case "$ARG" in
    -d|--detach)
      DETACHED=true
      break
      ;;
  esac
done

if [[ $1 == "run" ]] && [[ $DETACHED == false ]]; then
    docker-compose run --rm "${@:2}"
elif [[ $1 == "up" ]] && [[ $DETACHED == false ]]; then
    docker-compose up "${@:2}"; docker-compose down
else
    docker-compose "${@:1}"
fi

編輯:更新了腳本,以便分離模式可以正常工作,在 artu-hnrq 建議的循環中添加了break

我不確定我是否理解, docker-compose run --user 是一個選項,並且 docker-compose.yml 支持用戶密鑰( http://docs.docker.com/compose/yml/#working95dir-entrypoint-用戶主機名-域名-mem95limit-privileged-restart-stdin95open-tty-cpu95shares )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM