我怎么才能创build一个数据容器只有使用docker-compose.yml?

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

我无法弄清楚如何创build一个数据容器(没有进程运行)与docker组成。

究竟如何做到这一点取决于你的数据只使用容器的图像。 如果你的图像有一个entrypoint ,你需要在你docker-compose.yml覆盖它。 例如,这是来自docker hub的官方MySql映像的解决scheme:

 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 ,当你调用docker ps -a时,它显示一个Exited的状态。 docker inspect进一步调查将显示,它有一个0的时间戳。 这意味着容器从未运行。 就像docker工作人员在这里所说的那样。

现在,只要你不做docker-compose rm -v ,你的数据只有容器( ..._DatabaseData_1 )不会丢失数据。 因此,您可以docker-compose stop进行docker-compose stopdocker-compose up

如果你喜欢使用一个像tianon/true专用数据的图像,这个工作原理是一样的。 这里你不需要覆盖entrypoint ,因为它不存在。 看起来这个图像和docker工具有一些问题。 我还没有尝试过,但如果遇到任何问题, 本文可能值得一读。

一般来说,对于访问容器的数据专用容器,使用相同的映像似乎是个好主意。 查看Data-only容器疯狂了解更多细节。

只有数据的容器(DOC)是一个仅作为卷提供者创build的容器。 容器本身没有其他function,除了其他容器可以通过使用volumes_from指令来安装它的容量。

DOC只能运行一次才能创build卷。 其他容器即使停止,也可以引用其中的卷。

OP问题: docker-compose.yml在你每次做docker-compose.yml启动DOC。 OP要求一个选项,只使用某种create_only: true选项创build容器和卷,而不运行它。

正如在OP的问题中提到的那样:

  • 你可以创build一个与docker-compose.yml指定的名称相同的数据容器,然后运行docker-compose.yml docker-compose up --no-recreate (在docker-compose.yml指定docker-compose.yml不会被重新创build)。
  • 或者用一个简单的命令运行一个容器,永远不会返回。
    像: tail -f /dev/null