标签: docker-volume

Docker Compose 相对路径与 Docker 卷

我有一个用于网站的 docker compose 文件,在用于各种目的的一堆其他容器中,包括一个具有持久数据的 mysql 数据库。目前撰写文件指定了数据的相对路径,例如:

 
mysql: 
  图像:mysql:5.7
  容器名称:sqldb
  卷:
   - ./mysql_data/_data:/var/lib/mysql

和文件夹结构:

 --mysql_data
 --static_content
 docker-compose.yml

这意味着在任何时候我都可以通过复制整个文件夹并运行 docker-compose up 将整个站点(包括持久化内容)移动到另一台服务器。

但是阅读有关 docker 卷的信息,这听起来像是首选方法(使用“docker run”似乎不支持相对绑定安装路径,但可以在 compose 中工作)所以我想知道是否需要将这种方法更改为使用卷?这种相对绑定方法是否存在本质上的错误?如果我确实切换到卷,在移动容器时是否必须手动移动卷(例如,此方法如何将仅数据卷从一台主机移植到另一台主机?)?

docker docker-compose docker-volume

14
推荐指数
1
解决办法
3万
查看次数

如何将docker卷复制到本地?

我创建了一个 docker 卷“hello”,它包含一些数据。

怎么复制到本地?

第一的 :

kerydeMacBook-Pro:~ hu$ docker volume create --name hello
hello
Run Code Online (Sandbox Code Playgroud)

检查:

kerydeMacBook-Pro:~ hu$ docker volume ls
DRIVER              VOLUME NAME
local               hello
Run Code Online (Sandbox Code Playgroud)

卷“你好”检查

kerydeMacBook-Pro:~ hu$  docker volume inspect hello
[
    {
        "Name": "hello",
        "Driver": "local",
        "Mountpoint": "/mnt/sda1/var/lib/docker/volumes/hello/_data"
    }
]
Run Code Online (Sandbox Code Playgroud)

如何将卷“hello”复制到本地?

我尝试:

kerydeMacBook-Pro:~ hu$  docker cp hello:/mnt/sda1/var/lib/docker/volumes/hello/_data /Users/hu/Desktop/12
Error response from daemon: no such id: hello
Run Code Online (Sandbox Code Playgroud)

它不像预期的那样工作!

谁能帮我 ?

docker boot2docker docker-volume

13
推荐指数
2
解决办法
1万
查看次数

Docker命名卷未更新

我对如何使用命名数据卷(不是数据容器)感到困惑.

我有一个命名数据卷app_src,/usr/src/app使用docker compose文件挂载.但是,在对我的源代码(本地)进行更改后,构建映像不会更新卷.

我正在构建这样的图像,

docker-compose -f development.yml build并运行它docker-compose -f development.yml up -d.

为了确认卷没有改变,我附加到正在运行的容器中,并且确实没有更新源代码.

这是我的docker撰写文件development.ymlDockerfile我的web服务.版本:'2'

services:
  web:
    restart: always
    build: ./web
    expose:
      - "8000"
    volumes:
      - app_src:/usr/src/app
    links:
      - postgres:postgres
    env_file: development.env
    command: ./start_web.sh

volumes:
   app_src: {}


FROM python:3.4.4

WORKDIR /usr/src/app
RUN rm -rf /usr/src/app/*
COPY . /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

我可以通过像这样安装主机来使它工作,

volumes:
    - ./web/src:/usr/src/app
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu 16.04上运行docker 1.11.2.我的理解错了吗?我确实看了一下文档,但是我能找到任何能很好地解释音量的东西.

docker docker-compose docker-volume

12
推荐指数
1
解决办法
6899
查看次数

Docker卷:重命名或复制操作

根据文档, Docker 卷的广告方式如下:

卷是持久保存 Docker 容器生成和使用的数据的首选机制。虽然绑定挂载取决于主机的目录结构和操作系统,但卷完全由 Docker 管理

但如果它们这么好,为什么没有像复制、重命名这样的操作来管理它们呢?

命令:

docker volume --help
Run Code Online (Sandbox Code Playgroud)

只给出这些选项:

Usage:  docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes
Run Code Online (Sandbox Code Playgroud)

文档还没有说明任何其他命令,也没有任何具有复制或重命名功能的解决方法。

我想重命名当前现有的卷并创建另一个(空白)来代替最初命名的卷,并用新数据填充它以进行测试。

完成测试后,我可能希望(或不希望)删除新创建的卷,并将另一个卷重命名为之前的(原始)名称,以将卷设置恢复为之前的状态。

我不想创建要重命名的原始卷的备份。重命名对我来说已经足够好了,而且比创建备份和恢复要快得多。

编辑 docker-compose 文件并更改卷的名称也是我想避免的。

是否有任何解决方法可以用于重命名卷?

Docker Root Dir: /var/lib/docker针对和子目录的 shell 的低级手动管理是否可以volumes作为解决方案,或者该方法可能会导致某些 dockeremon 数据不一致?

copy rename command-line-interface docker docker-volume

12
推荐指数
2
解决办法
2万
查看次数

docker-compose在node_modules上的卷但是为空

我是Docker的新手,我想在我的计算机上映射node_modules文件夹(用于调试目的).

这是我的docker-compose.yml

web:
  build: .
  ports:
    - "3000:3000"
  links:
    - db
  environment:
    PORT: 3000
  volumes:
    - .:/usr/src/app
    - /usr/src/app/node_modules
db:
  image: mongo:3.3
  ports:
    - "27017:27017"
  command: "--smallfiles --logpath=/dev/null"
Run Code Online (Sandbox Code Playgroud)

我在使用Docker for Mac.当我运行docker-compose up -d所有正确,但它在我的计算机上创建一个node_modules文件夹,但它是空的.我进入容器的bash和ls node_modules,所有包都在那里.

如何在计算机上获取容器上的内容呢?

谢谢

node.js docker docker-compose docker-volume

11
推荐指数
2
解决办法
7837
查看次数

删除Airflow Scheduler日志

我正在使用Docker Apache airflow VERSION 1.9.0-2(https://github.com/puckel/docker-airflow).

调度程序生成大量日志,文件系统将快速耗尽空间,因此我尝试以编程方式删除由airflow创建的调度程序日志,可在调度程序容器中找到(/ usr/local/airflow/logs/scheduler )

我已经设置了所有这些维护任务:https: //github.com/teamclairvoyant/airflow-maintenance-dags

但是,这些任务仅删除工作服务器上的日志,而调度程序日志位于调度程序容器中.

我还设置了远程日志记录,将日志发送到S3,但正如本文中提到的删除气流任务日志中所述,此设置不会阻止气流写入本地计算机.

此外,我还尝试在worker和scheduler之间创建一个共享命名卷,如此处所述Docker Compose - 在多个容器之间共享命名卷.但是,我在worker中收到以下错误:

ValueError: Unable to configure handler 'file.processor': [Errno 13] Permission denied: '/usr/local/airflow/logs/scheduler'

和调度程序中的以下错误:

ValueError: Unable to configure handler 'file.processor': [Errno 13] Permission denied: '/usr/local/airflow/logs/scheduler/2018-04-11'

那么,人们如何删除调度程序日志?

docker docker-compose airflow docker-volume airflow-scheduler

11
推荐指数
2
解决办法
4945
查看次数

在docker数据容器和卷中部署Web应用程序

我对不应该使用数据容器的普遍共识感到困惑.我有特定的用例,我想完成.

我想拥有docker nginx容器,并在其后面有一些带应用程序的其他容器.要运行我的应用程序的最新版本,我想从我的私人docker注册表下载ready容器.该应用程序现在纯粹是静态的HTML,JavaScript的东西.

所以我的计划是创建将保存文件的docker image,并在some/webapp文件夹中指定一个命名卷.nginx容器将为此卷提供服务.我没有看到任何其他方式如何将一堆文件移动到远程系统"docker containerinerized"方式.我实际上没有创建被诅咒的数据容器吗?

无论如何在app容器交换期间会发生什么?当我停止app容器时,该卷仍然可以访问,因为它放在主机上.当我拉动并启动新版本的app容器时.该卷将再次创建并预先填充存储在同一位置的图像文件,替换主机上的内容,以便nginx容器将从现在的新版本的应用程序服务器.权利?当我从nginx容器引用尚不存在的卷时会发生什么.

似乎命名值不会自动与图像内容一起提交.我也不确定如何在docker文件中创建命名卷,因为从这里获取的语法不起作用

FROM training/webapp

VOLUME webapp:/webapp
Run Code Online (Sandbox Code Playgroud)

docker docker-volume

10
推荐指数
1
解决办法
1605
查看次数

docker-compose v3:使用顶级卷语法在多个容器之间共享装入装入的卷

使用docker-compose synthax的v2,我们能够做到这样的事情:

version: '2'
services:
  app:
    image: tianon/true
    volumes:
      - ../app:/var/www/app
  nginx:
    image: nginx
    volumes_from:
      - app
  php:
    image: php
    volumes_from:
      - app
Run Code Online (Sandbox Code Playgroud)

volumes_from现在是v3.2 invalid option.该文档仅用于使用新的顶级卷synthax,即all the ways better.我已经阅读了一些关于github的评论,也是人们提出的唯一解决方案

version: '3.2'
services:
  nginx:
    image: nginx
    volumes:
      - app:/var/www/app
  php:
    image: php
    volumes:
      - app:/var/www/app
volumes:
  app:
    driver_opts:
      type: none
      device: ../app
      o: bind
Run Code Online (Sandbox Code Playgroud)

这显然看起来更糟,它甚至对我不起作用.它给了我一个错误:no such file or directory.那么我还应该尝试什么呢?看起来我仍然可以使用links而不是顶级卷,但它被认为是文档中的遗留选项.那么如何使用新语法做到这一点?

编辑: 问题已被确定为可能重复,但我不同意.请参阅我的评论以获得解释.

docker docker-compose docker-volume

10
推荐指数
1
解决办法
3955
查看次数

如何创建docker卷设备/主机路径

我相信有一种简单的方法可以将文件复制到已经安装到容器的 docker 卷中。

docker cp /tmp/my_data/. my_container:/my_data如何将多个文件复制到 docker 数据卷中所述

但是,如何使用docker volume create --name my-volume其中已有文件的命名卷来创建?我读过将 cp 文件放入{{.Mountpoint}}.

我是 docker 的新手,所有这些都是细微差别,如果我对卷的基本理解不正确,我深表歉意。

docker docker-volume

10
推荐指数
1
解决办法
3万
查看次数

使用 Docker 桌面的 WSL2 上的 Docker 卷

我只是在 Docker for Windows 上试用 WSL 2,但我在安装卷时遇到了问题:

version: "3.7"

services:
    node:
        build: .
        container_name: node
        hostname: node
        volumes: 
            - ./app:/app
        stdin_open: true
Run Code Online (Sandbox Code Playgroud)

容器构建并启动良好,我使用 docker exec 很好地访问它,但/app容器内的文件夹未绑定到我的笔记本电脑app文件夹。但是,正确的路径实际上已正确安装在正在运行的容器上:

(这里我在主机上执行密码,如果它与容器上安装的内容完美匹配)

?  app pwd   
/mnt/c/Users/willi/devspace/these/app
Run Code Online (Sandbox Code Playgroud)

这是 portainer 的屏幕,它告诉我在容器中安装了哪些路径并且一切都匹配。

来自 portainer 的 docker 卷

我在主机上的 app 文件夹中创建的文件在容器的 app 文件夹中不可见,反之亦然。这很奇怪,我不知道如何调试它。

补充资料:

  • Windows 10 专业版 10.0.19041
  • Docker for Windows 版本:2.3.0.4
  • docker version WSL 中的输出:19.03.12
  • docker-compose version : 1.26.2

谢谢

docker docker-compose docker-volume windows-subsystem-for-linux docker-desktop

10
推荐指数
2
解决办法
2万
查看次数