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

how to ignore some container when i run `docker-compose rm`

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

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

Sometime i must change some configure files of node and mysql and rebuild.So ,I must remove containers and start again.

我使用 google 搜索了一遍,但一无所获。

就目前情况而言,出于这个原因,您需要将数据容器保存在 Docker Compose 之外。无论如何,数据容器不应该是 运行,所以这是有道理的。

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

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

echo 命令将完成并且容器将立即退出,但只要你不 docker rm 容器你仍然可以在 --volumes-from 命令中使用它,所以你可以在 Compose 中执行以下操作:

db:
  image: mysql
  volumes-from: 
     - data

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

@AdrianMouat 现在,当我使用 docker-compose (https://github.com/docker/compose/releases) 的新版本 1.2rc 启动所有容器时,我可以指定一个 *.yml 文件。就像下面这样:

文件:data.yml

data: image: ubuntu volumes: - "/var/lib/mysql" 考虑您的有用答案

docker-compose 的替代方案,在 Go (https://github.com/michaelsauter/crane) 中,让您创建容器组——包括覆盖 default 组,以便重建应用程序时可以忽略数据容器。

假设您有一个 "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 构建,您也必须指定一个 "image" —— 当不拉取时,这是名称 docker 将在本地提供图像!另请注意,容器名称是全局的,并且不像在 docker-compose.

中那样以文件夹名称为前缀

请注意,crane 至少存在一个主要缺陷:它会简单地忽略放错位置或拼写错误的字段!这使得调试 docker-compose yaml 变得更加困难。