标签: volumes

Mac上的Docker Machine:在docker主机/ docker-machine上看不到挂载的卷?卷物理存储在哪里?

我在Macbook Pro笔记本电脑上运行docker-machine(0.5.0)docker-compose(1.5.0)来让我的容器运行.

这意味着我正在使用docker-machine来创建我的虚拟机boot2docker驱动的HOST机器,它将运行我的docker守护程序并托管我的所有容器.

我想我缺少一些关于HOSTS和VOLUME概念的东西,因为它们指的是Docker和文档.

这是我的docker-compose.yml文件(web只是构建了php:5.6-apache图像):

web:
  restart: "always"
  build: ./docker-containers/web
  ports:
    - "8080:80"
  volumes:
    - ./src:/var/www/html
  links:
    - mysql:mysql

mysql:
  restart: "always"
  image: mysql:5.7
  volumes_from:
    - data
  ports:
    - "3306:3306"
  environment:
    - MYSQL_ROOT_PASSWORD=XXX

data:
  restart: "no"
  image: mysql:5.7
  volumes:
    - /var/lib/mysql
  command: "true" 
Run Code Online (Sandbox Code Playgroud)

Docker撰写卷的文件文档在这里:http://docs.docker.com/compose/compose-file/

它表示卷 - 将路径挂载为卷,可选择指定主机上的路径(HOST:CONTAINER),或访问模式(HOST:CONTAINER:ro).

在这种情况下主机是指我的由docker-machine创建的VM,对吗?还是我的本地macbook文件系统?将VM上的路径挂载到容器?

网上我声明:

volumes:
  - ./src:/var/www/html
Run Code Online (Sandbox Code Playgroud)

这是将我的macbook pro上的本地macbook文件系统./src文件夹映射到我的Web容器.如果我的理解是正确的,不应该将我的VM上的./src文件夹映射到Web容器中的/ var/www/html吗?!从理论上讲,我认为我应该首先将我的本地mac文件系统文件夹./src复制到我的VM,然后我做这个卷声明.似乎docker-compose一下子神奇地做了所有这一切?困惑

最后,我们可以看到我正在创建一个仅限数据的容器来保存我的mysql数据.我宣布:

volumes:
   - /var/lib/mysql …
Run Code Online (Sandbox Code Playgroud)

mysql volumes docker docker-compose docker-machine

11
推荐指数
1
解决办法
3952
查看次数

当卷链接现有的填充主机和容器目录时会发生什么

我搜索了文档但没有出现.我知道我可以测试它,但我感觉很懒,所以为了将来的参考和任何想要展示他们的专业知识并赢得一些SO代表的人......

主机文件夹是否填充了容器文件夹内容?

是相反的吗?

两个文件夹内容是否合并?(在这种情况下:当两个文件夹中有同名文件时会发生什么?)

还是会产生错误?是否在启动时抛出错误,或者当您尝试使用指向容器上现有填充文件夹的VOLUME构建映像时抛出该错误?

另外,文档中没有的另一件事:我是否必须在Dockerfile中将容器路径定义为VOLUME,以便在启动容器时使用-v或者我可以动态创建卷?

volumes docker dockerfile

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

docker for windows 上的 Kubernetes,带有 hostPath 的持久卷给出了“不允许操作”

我正在尝试将 Windows 中的文件夹连接到容器文件夹。这适用于需要读取文件夹中文件的 .NET 应用程序。在普通的 docker 容器中,使用 docker-compose,该应用程序可以正常运行,但由于这只是我们必须监视的几个不同应用程序之一,因此我们正在尝试让 kubernetes 参与其中。这也是我们失败的地方。作为 kubernetes 的初学者,我使用 kompose.exe 将 compose 文件转换为 kuberetes 风格。但是,无论我使用 hostPath 还是 permanentVolumeClaim 作为标志,我都无法让事情“开箱即用”。使用 hostPath 时,路径非常不正确,而使用 permanentVolumeClaim 时,我收到一条警告,指出不支持在主机上安装卷。因此,我尝试自己完成这一部分,但既不能使用持久卷,也不能直接在部署文件中输入安装数据。我最接近的是我可以进入该文件夹,并且可以更改为其中的子文件夹,但是一旦我尝试运行任何其他命令,无论是“ls”还是“cat”,我都会收到“不允许操作” 。这是我的 docker compose 文件,它按预期工作

version: "3.8"
services:
    test-create-hw-file:
        container_name: "testcreatehwfile"
        image: test-create-hw-file:trygg
        network_mode: "host"
        volumes:
            - /c/temp/testfiles:/app/files
Run Code Online (Sandbox Code Playgroud)

在该文件上运行 konvert compose:

PS C:\temp> .\kompose.exe convert -f .\docker-compose-tchwf.yml --volumes hostPath -v
DEBU Checking validation of provider: kubernetes
DEBU Checking validation of controller:
DEBU Docker Compose version: 3.8
WARN Service "test-create-hw-file" won't be created because 'ports' is …
Run Code Online (Sandbox Code Playgroud)

windows volumes docker kubernetes

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

检测OS X上安装卷的时间

我有一个OS X应用程序,需要响应正在安装或卸载的卷.

我已经通过定期检索卷列表并检查更改来解决了这个问题,但我想知道是否有更好的方法.

macos cocoa objective-c volumes

7
推荐指数
3
解决办法
3863
查看次数

如何清理 Docker ZFS 旧共享

概括

鉴于:

  • 存储驱动docker用户为ZFS;
  • docker创建legacy数据集;

重击:

$ docker ps -a | wc -l
16

$ docker volume ls | wc -l
12

$ zfs list | grep legacy | wc -l
157
Run Code Online (Sandbox Code Playgroud)

16 个容器(运行和停止)。12卷。157 个数据集。这似乎是大量的遗留数据集。我想知道他们中的很多人是否是如此孤儿,甚至docker不再了解他们,所以他们没有得到清理。

基本原理

我的 Debian zfs 池中有大量遗留卷。当我开始在这台机器上使用 Docker 时,它们开始出现:

$ sudo zfs list | grep legacy | wc -l
486
Run Code Online (Sandbox Code Playgroud)

它们都是以下形式:

pool/var/<64-char-hash>                  202K  6,18T   818M  legacy
Run Code Online (Sandbox Code Playgroud)

此位置仅供 docker 使用。

$ docker info | grep -e Storage -e Dataset …
Run Code Online (Sandbox Code Playgroud)

zfs volumes docker

7
推荐指数
1
解决办法
2992
查看次数

docker-compose :版本 3 中共享卷的绝对路径

为了替换volumes_from:版本 2 中的指令(对于helpyio),我尝试了这个,但是出了问题。

version: "3"

services:
  frontend:
    ...
    volumes:
      - myVolume:/var/www:ro
  backend:
    ...
    volumes:
      - myVolume:/var/www

volumes:
  myVolume:
    driver:      local
    driver_opts:
      type:      none
      device:    "/my/local/absolute/path/"
      o:         bind
Run Code Online (Sandbox Code Playgroud)

我有类似的错误

错误:对于前端:无法为服务前端创建容器:无法安装本地卷:安装/my/local/absolute/path/:/var/www,标志:0x1000:没有这样的文件或目录

我还尝试了一些选项的变体volumes:,但没有成功。最后一件事,我不想手动创建这个本地目录。

我肯定会错过一些东西,但看不到什么......有人有这个用例的解决方案吗?

非常感谢

volumes docker docker-compose

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

Windows 上的 docker 卷(仅在 docker 容器内部)的读/写性能更好还是主机操作系统上安装/共享的卷更好?

我读到,在 Windows 上安装共享卷时,性能会受到重大影响。与仅说 docker 卷内的 postgres DB(不与主机操作系统共享)或从平面文件读取/写入的速率相比如何?

有没有人找到这方面的具体数字?我认为,如果仅针对磁盘 IO 性能,即使是 4 倍的减速对于我的用例来说也是可以接受的...我的印象是,在 Windows 上安装 + 共享卷明显较慢...所以我想知道是否放弃此共享组件帮助将事情改善到可以接受的范围内。

另外,如果我将 Postgres 保留在裸机上,我的所有 docker 应用程序仍然可以这样访问 Postgres 吗?(这可能是我想象的首选 - 我已经看到了裸机读/写速度提高 4 倍的报告) - 但我仍然需要知道......因为我的应用程序也处理大量的平面文件的复制/读取/移动。 ..所以需要知道什么是最适合的。

例如,如果共享卷与仅将其保留在容器上相比确实很糟糕,那么我可以选择通过网络推送文件以避免需要共享安装卷作为瓶颈......

感谢您的任何见解

windows performance mount volumes docker

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

将 docker bind-mount 移动到卷

实际上,我像这样运行我的容器,例如:

docker run -v /nexus-data:/nexus-data sonatype/nexus3
              ^
Run Code Online (Sandbox Code Playgroud)

阅读文档后,我发现完全由 docker 管理的卷。出于某些原因,我想改变运行我的容器的方式,做这样的事情:

docker run -v nexus-data:/nexus-data sonatype/nexus3
              ^
Run Code Online (Sandbox Code Playgroud)

我想将我现有的绑定安装转移到卷。

但我不想将数据丢失到/nexus-data文件夹中,是否有可能将此文件夹传输到新卷,而无需重新启动所有内容?因为我也有 Jenkins 和 Sonar 容器,所以我只想改变拥有持久数据的方式。这是一个正确的方法来做到这一点?

volumes docker

6
推荐指数
1
解决办法
3704
查看次数

多个容器之间的Docker命名卷

我想将一些服务部署到我的服务器中,并且所有服务都将使用 nginx 作为 Web 服务器,每个项目都有自己的 .conf 文件,我想与 nginx 容器共享所有这些。我尝试使用命名卷,但是当它被多个容器使用时,数据会被替换。我想从不同的容器中获取所有这些 .conf 文件并将其放入一个卷中,以便 nginx 容器可以读取它。我还尝试在命名卷中使用子目录,但是,使用 namedVolumeName/path 不起作用。

Obs:我在所有项目中都使用 docker-compose

version: "3.7"

services:
  backend:
    container_name: jzmimoveis-backend
    image: paulomesquita/jzmimoveis-backend
    command: uwsgi --socket :8000 --wsgi-file jzmimoveis/wsgi.py
    volumes:
      - nginxConfFiles:/app/nginx
      - jzmimoveisFiles:/app/src
    networks:
      - jzmimoveis
    restart: unless-stopped
    expose:
      - 8000

  frontend:
    container_name: jzmimoveis-frontend
    image: paulomesquita/jzmimoveis-frontend
    command: serve -s build/
    volumes:
      - nginxConfFiles:/app/nginx
    networks:
      - jzmimoveis
    restart: unless-stopped
    expose:
      - 5000

volumes:
  nginxConfFiles:
    external: true
  jzmimoveisFiles:
    external: true
networks:
  jzmimoveis:
    external: true
Run Code Online (Sandbox Code Playgroud)

例如,在这种情况下,我将前端和后端 nginx 文件都链接到命名卷 nginxConfFiles,但是,当我docker-compose …

volumes docker docker-compose

6
推荐指数
2
解决办法
494
查看次数

GitHub Actions 中的 Docker-Compose 卷挂载问题已检出存储库

我的 Github Actions 中有以下逻辑:

  1. 签出不同的存储库
  2. 在该存储库中运行 docker 命令
  3. 查看我当前的工作流程存储库
  4. 在正在运行的 docker 实例上运行代码

但是,当我执行此操作时,我发现步骤 1 中的本地文件夹未安装到 docker 容器。

我想将本地目录作为卷安装到 docker 容器。我的 docker-compose 文件如下所示:

version: '3.9'

services:
  kong-cp:
    image: myImage
    restart: on-failure
    user: root
    volumes:
      - ./rsa:/tmp
Run Code Online (Sandbox Code Playgroud)

我的 GitHub Actions 工作流程如下所示:

name: Test

on: workflow_dispatch

jobs:
  tests:
    runs-on: ubuntu-latest

    steps:  
      - name: Checkout docker-compose-generator
        uses: actions/checkout@v3
        with:
          repository: docker-compose-generator
          token: ${{ secrets.GH_TOKEN }}
          ref: test/mount

      - name: Login to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USR }}
          password: ${{ secrets.DOCKERHUB_PSW }} …
Run Code Online (Sandbox Code Playgroud)

volumes docker github-actions

6
推荐指数
0
解决办法
1161
查看次数