当我运行`docker-compose rm`时如何忽略一些容器

我有四个容器是noderedismysqldata 。 当我运行docker-compose rm ,它将删除所有包含容器data的容器.my的数据是在容器中,而我不想rm容器data

为什么我必须装那个容器?

有时我必须更改一些configuration文件的节点和MySQL和重build。所以,我必须删除容器,并重新启动。

我再次search使用谷歌一无所获。

按照现状,您需要将数据容器保留在Docker Compose之外。 数据容器不应该运行,所以这是有道理的。

所以,要创build你的数据容器做一些事情:

 docker run --name data mysql echo "App Data Container" 

echo命令将完成,容器将立即退出,但是只要你没有将--volumes-from容器中,你仍然可以在--volumes-from命令中使用它,所以你可以在Compose中做以下的事情:

 db: image: mysql volumes-from: - data 

只需要移除docker-compose.yml中的任何代码来启动数据容器。

在Go( https://github.com/michaelsauter/crane )中,可以使用docker-compose的替代方法创buildcontianer组,包括覆盖默认组,以便在重build应用程序时可以忽略数据容器。

鉴于你有一个“crane.yaml”与以下容器和组:

 containers: my-app: ... my-data1: ... my-data2: ... groups: default: - "my-app" data: - "my-data1" - "my-data2" 

您可以构build一次您的数据容器:

 # 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构build,你也必须指定一个“图像” – 当不拉的时候,这个名字是docker会给本地的图像! 另外请注意,容器名称是全局的,并且没有以它们在docker-compose中的文件夹名称作为前缀。

请注意,起重机至less有一个重大缺陷:它简单地忽略了错位或拼错的字段! 这使得debuggingdocker-compose yaml更加困难。

@AdrianMouat现在,我可以指定一个* .yml文件,当我启动所有容器与docker-compose的新版本1.2rc( https://github.com/docker/compose/releases )。 如下所示:

文件: data.yml

data: image: ubuntu volumes: - "/var/lib/mysql"认为你的答案非常有用