如何在运行'docker compose rm'时忽略某些容器`

如何在运行'docker compose rm'时忽略某些容器`,docker,docker-compose,Docker,Docker Compose,我有四个容器,分别是node、redis、mysql和data。当我运行docker compose rm时,它将删除包含容器数据的所有容器。我的mysql数据在容器中,我不想rm容器数据 为什么我必须把那个集装箱装起来 有时我必须更改一些node和mysql的配置文件并重建 ,我必须移除容器并重新开始 我用谷歌搜索了一遍又一遍,结果一无所获。就目前情况而言,出于这个原因,您需要将数据容器放在Docker Compose之外。数据容器无论如何都不应该运行,因此这是有意义的 因此,要创建数据容器,

我有四个容器,分别是
node
redis
mysql
data
。当我运行
docker compose rm
时,它将删除包含容器
数据的所有容器。我的mysql数据在容器中,我不想rm容器
数据

为什么我必须把那个集装箱装起来

有时我必须更改一些node和mysql的配置文件并重建 ,我必须移除容器并重新开始


我用谷歌搜索了一遍又一遍,结果一无所获。

就目前情况而言,出于这个原因,您需要将数据容器放在Docker Compose之外。数据容器无论如何都不应该运行,因此这是有意义的

因此,要创建数据容器,请执行以下操作:

docker run --name data mysql echo "App Data Container"
echo命令将完成,容器将立即退出,但只要您不
docker rm
容器,您仍然可以在
--卷中使用它,从
命令,因此您可以在Compose中执行以下操作:

db:
  image: mysql
  volumes-from: 
     - data

只需删除
docker compose.yml
中的任何代码即可启动数据容器。

@AdrianMouat现在,我可以在使用新版本的docker compose()启动所有容器时指定一个*.yml文件。如下所示:

文件:
data.yml


数据:
图片:ubuntu
卷数:
-“/var/lib/mysql”

考虑到您非常有用的答案

作为docker compose的替代方案,在Go()中,让我们创建contianer组——包括覆盖默认组,以便在重建应用程序时可以忽略数据容器

假设您有一个带有以下容器和组的“crane.yaml”:

containers:
    my-app:
       ...
    my-data1:
       ...
    my-data2:
       ...
groups:
    default:
        - "my-app"
    data:
        - "my-data1"
        - "my-data2"
您可以构建数据容器一次:

# create your data-only containers (safe to run several times)
crane provision data   # needed when building from Dockerfile
crane create data

# build/start your app.
crane lift -r  # similar to docker-compose build && docker compose up

# Force re-create off your data-only containers...
crane create --recreate data
PS!与docker compose不同,即使是从Dockerfile构建,也必须指定一个“图像”--在不拖动时,这是docker在本地为图像指定的名称!还请注意,容器名称是全局的,而不是以docker compose中的文件夹名称作为前缀


请注意,crane至少有一个主要缺陷:它只是忽略了放错位置或拼写错误的字段!这使得调试docker compose yaml变得更加困难。

“只要你不
docker rm
”:顺便说一句,这是我当前的问题:当你rm你的容器(而不是卷)时会发生什么:如何运行一个新的数据卷容器,并且仍然让它引用你的旧(现在搁浅的)卷?你必须弄清楚它在哪里。如果运行
docker inspect-f{{.Volumes}CONTAINER
,您将看到卷的目录。但一般来说,您不想玩孤立卷。看看更多的工具。“一般来说,你不想玩孤立卷。”但是你有选择吗?您的容器已丢失,您必须还原指向旧数据的新容器(同名)。@VonC只是不删除数据容器:)并进行备份,然后您可以使用备份填充新的数据容器。“只是不删除数据容器”:这正是我现在面临的问题。由于一些严格的政策,所有容器都被移除(没有-v)。然后重新声明。我们的期望是找到它的数据(它位于
/var/lib/docker/vfs/dir
中,不受干扰)。下周我将发布一个关于堆栈溢出的问题。我也许可以一起使用docker compose和crane。