这个问题来自Docker的存储库中的一个问题:
https://github.com/docker/compose/issues/942
我无法弄清楚如何使用docker compose创建数据容器(没有进程正在运行)。
答案 0 :(得分:25)
究竟该怎么做取决于您使用的数据专用容器的图像。如果您的图片有entrypoint
,则需要在docker-compose.yml
中覆盖此图片。例如,这是来自docker hub的官方MySql映像的解决方案:
DatabaseData:
image: mysql:5.6.25
entrypoint: /bin/bash
DatabaseServer:
image: mysql:5.6.25
volumes_from:
- DatabaseData
environment:
MYSQL_ROOT_PASSWORD: blabla
当您对此进行docker-compose up
时,您会收到..._DatabaseData_1
这样的容器,当您致电Exited
时,该容器会显示docker ps -a
状态。使用docker inspect
进行的进一步调查将显示其时间戳为0
。这意味着容器从未运行过。就像docker compose here的所有者所说的那样。
现在,只要您不执行docker-compose rm -v
,您的仅数据容器(..._DatabaseData_1
)就不会丢失其数据。因此,您可以根据需要随时docker-compose stop
和docker-compose up
。
如果您想使用像tianon/true
这样的专用数据图像,则其工作方式相同。在这里,您不需要覆盖entrypoint
,因为它不存在。看起来该图像和docker组合存在一些问题。我没有尝试过,但this article可能值得一读,万一你遇到任何问题。
通常,对于您正在使用的容器访问它的数据集容器,使用相同的映像似乎是个好主意。有关详细信息,请参阅Data-only container madness。
答案 1 :(得分:2)
这个问题的其他答案已经过时了,并且已经支持数据量一段时间了。示例:
version: "3.9"
services:
frontend:
image: node:lts
volumes:
- myapp:/home/node/app
volumes:
myapp:
见 https://docs.docker.com/storage/volumes/#use-a-volume-with-docker-compose 了解详情和选项。
答案 2 :(得分:1)
仅数据容器(DOC)是仅用作卷提供程序的容器。除了其他容器可以使用volumes_from
指令安装它的卷之外,容器本身没有任何功能。
DOC必须只运行一次才能创建卷。即使它已经停止,其他容器也可以引用其中的卷。
OP问题:
docker-compose.yml
每次执行docker-compose up
时都会启动DOC。 OP要求选择仅使用某种create_only: true
选项创建容器和卷,而不是运行它。
答案 3 :(得分:0)
正如OP提出的问题中提到的那样:
docker-compose.yml
中指定名称相同的数据容器,并运行docker-compose up --no-recreate
(docker-compose.yml
中指定的那个将不会重新创建)。< / LI>
tail -f /dev/null