这个问题来自Docker存储库中的一个问题:https : //github.com/docker/compose/issues/942
我无法弄清楚如何使用docker compose创建数据容器(无进程运行)。
确切的操作方法在一定程度上取决于您将数据仅用于容器的图像。如果您的图片带有entrypoint,则需要在中将其覆盖docker- compose.yml。例如,这是来自docker hub的官方MySql映像的解决方案:
entrypoint
docker- compose.yml
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 owner在此处声明的那样。
docker-compose up
..._DatabaseData_1
Exited
docker ps -a
docker inspect
0
现在,只要您不执行docker-compose rm -v,您的仅数据容器(..._DatabaseData_1)就不会丢失其数据。所以,你可以做docker-compose stop,并docker-compose up经常随你喜欢。
docker-compose rm -v
docker-compose stop
如果您喜欢使用专用的仅数据图像,则tianon/true此方法也一样。在这里,您不需要覆盖entrypoint,因为它不存在。该映像和docker compose似乎存在一些问题。我没有尝试过,但是如果您遇到任何问题,这篇文章值得一读。
tianon/true
通常,对仅数据容器使用与访问它的容器相同的图像似乎是一个好主意。有关更多详细信息,请参见仅数据容器疯狂。