4

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

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

有时我必须更改节点和 mysql 的一些配置文件并重建。所以,我必须删除容器并重新开始。

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

4

3 回答 3

3

就目前情况而言,出于这个原因,您需要将数据容器保存在 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即可启动数据容器。

于 2015-04-10T11:04:28.063 回答
1

docker-compose 的替代方案,在 Go ( https://github.com/michaelsauter/crane ) 中,让您创建 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 变得更加困难。

于 2015-05-23T14:12:21.287 回答
0

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

文件:data.yml

data: image: ubuntu volumes: - "/var/lib/mysql" 想你很有用的答案

于 2015-04-25T14:18:30.567 回答