[英]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 stop
和docker-compose start
來啟動/停止您的服務。 這與docker-compose down
不同:
停止容器並刪除由
up
創建的容器、網絡、卷和圖像。
您嘗試執行的操作存在問題:
如果你docker-compose up
並且你的一個容器完成了它的任務並被(自動)刪除,那么你不能docker-compose stop
和docker-compose start
再次。 移除的容器將無法再次start
。
你可能想看看:
只需運行docker-compose up && docker-compose rm -fsv
🙂
這個問題發布已經有一段時間了,但我認為在 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.