如何仅使用docker-compose.yml创建数据容器?

时间:2015-10-02 13:46:51

标签: docker docker-compose volumes

这个问题来自Docker的存储库中的一个问题:
https://github.com/docker/compose/issues/942

我无法弄清楚如何使用docker compose创建数据容器(没有进程正在运行)。

4 个答案:

答案 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 stopdocker-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-recreatedocker-compose.yml中指定的那个将不会重新创建)。< / LI>
  • 或者您运行一个容器,其中包含一个永不返回的简单命令 喜欢:tail -f /dev/null