Docker 命名卷与 DOC(仅数据容器)

标签 docker docker-compose

直到最新版本的 Docker (v1.10),我们被认为可以使用 DOC:data-only 容器。所以我会创建这样的文档(基于例如busybox)并使用 --volumes-from 将它链接到我的容器。您仍然可以在 Docker documentation 中阅读相关内容.

使用新版本的 docker,据说我们应该使用 named volumes 来代替 DOC。这是 docker-compose.yml 的示例:

version: '2'    
services:
  elasticsearch:
    image: elasticsearch:2.2.0
    command: elasticsearch -Des.network.host=0.0.0.0
    ports:
      - "9201:9200"
    volumes:
      - "es-data:/usr/share/elasticsearch/data"

volumes:    
  es-data:

这里我们创建并使用了命名卷es-data

关于这个新功能的文档仍然不多。我在问:

  • 我们可以用命名容器替换 DOC 吗?音量持续多久?如果我删除正在使用它的容器怎么办?
  • 我们怎样才能例如立即备份?以前,我可以 docker run --rm --volumes-from es-data ... 然后 tar 它。

最佳答案

Can we replace DOC with named containers?

在很多情况下,是的,命名容器会是更好的选择。

How long volume is persisted? What if I remove the container that is using it?

如果您移除容器,该卷仍将存在。删除卷的唯一方法是使用 docker-compose down -vdocker volume rm <volume name> .

How can we e.g. backup now? Previously, I could docker run --rm --volumes-from es-data ... and then tar it.

而不是 --volumes-from , 你可以使用 --volume=<volume name> .

请注意,docker-compose 创建的卷总是以项目名称为前缀,因此如果您将其与 docker 一起使用命令全名其实是<project_name>_es-data .

关于Docker 命名卷与 DOC(仅数据容器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36011595/

相关文章:

laravel - 在LaravelProject中调用未定义函数Xinax\LaravelGettext\bindtextdomain()错误

docker - Redis数据被Docker Entrypoint覆盖

docker - 如何连接到Docker容器内的localhost?

docker - 为什么当ls报告确实存在时,Docker为什么报告入口点文件不存在?

node.js - 使用 Node.js SDK 调用链代码时出错 [TypeError : Cannot read property 'getConnectivityState' of undefined]

docker - GCloud:将文件从本地计算机复制到Docker容器

php - 使用 Docker 和 WSL2 在 VSCode 中调试 PHP 时出现的问题

docker - 端口绑定(bind)在 Windows 上的 docker 中不起作用

docker - docker compose将保留旧卷,现在无法清除它们

Docker Compose 不更新内容