我有四个容器,分别是node
、redis
、mysql
和data
。当我运行时docker-compose rm
,它将删除我所有包含容器的容器。我data
的 mysql 数据在容器中,我不想 rm 容器data
。
为什么我必须 rm 那个容器?
有时我必须更改节点和 mysql 的一些配置文件并重建。所以,我必须删除容器并重新开始。
我又用谷歌搜索了一遍,一无所获。
我有四个容器,分别是node
、redis
、mysql
和data
。当我运行时docker-compose rm
,它将删除我所有包含容器的容器。我data
的 mysql 数据在容器中,我不想 rm 容器data
。
为什么我必须 rm 那个容器?
有时我必须更改节点和 mysql 的一些配置文件并重建。所以,我必须删除容器并重新开始。
我又用谷歌搜索了一遍,一无所获。
就目前情况而言,出于这个原因,您需要将数据容器保存在 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
即可启动数据容器。
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 变得更加困难。
@AdrianMouat 现在,当我使用 docker-compose 的新版本 1.2rc ( https://github.com/docker/compose/releases )启动所有容器时,我可以指定一个 *.yml 文件。就像下面这样:
文件:data.yml
data:
image: ubuntu
volumes:
- "/var/lib/mysql"
想你很有用的答案