标签: volumes

将本地卷挂载到远程docker容器上,可能吗?

我最近使用Docker非常满意,通常会在部署网站之前先测试网站以确保它们在服务器上正常运行。

通常,我将本地目录挂载到本地运行的映像,例如:

docker run -v c:\temp\website:/var/www/html (you get the picture)
Run Code Online (Sandbox Code Playgroud)

我很好奇的是,是否可以将本地卷挂载到运行docker的远程服务器上。我非常确定答案是否定的,除非我在防火墙中戳入整个整数,以便在外部共享本地卷。

但是,我想我会问。Docker似乎正在迅速做一些令人惊奇的事情。

谢谢

volumes docker

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

将 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
查看次数

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
查看次数

Docker:更改文件夹存储docker卷的位置

在我的Ubuntu EC2主持一个使用docker容器的应用程序.db数据和upload数据存储在卷中,CaseBook-data-dbCaseBook-data-uploads使用以下命令创建:

docker volume create --name=CaseBook-data-db
docker volume create --name=CaseBook-data-uploads
Run Code Online (Sandbox Code Playgroud)

通过docker-compose文件附加的卷:

version: '2'
services:
    mongo:
        container_name: "CaseBook-db"
        restart: always
        image: mongo:3.2.7
        ports:
            - "27017"
        volumes:
            - data_db:/data/db
        labels:
            - "ENVIRONMENT_TYPE=meteor"

    app:
        container_name: "CaseBook-app"
        restart: always
        image: "meteor/casebook"
        build: .
        depends_on:
            - mongo
        environment:
            - MONGO_URL=mongodb://mongo:27017/CaseBook
        ports:
            - "80:3000"
        volumes:
            - data_uploads:/Meteor-CaseBook-Container/.uploads
        labels:
            - "ENVIRONMENT_TYPE=meteor"
volumes:
     data_db:
        external:
            name: CaseBook-data-db
     data_uploads:
        external:
            name: CaseBook-data-uploads
Run Code Online (Sandbox Code Playgroud)

我需要将这些docker卷存储/home/ubuntu/data/在主机的不同文件夹(例如)中.如何更改卷的docker存储文件夹?或者有更好的方法来做到这一点?先感谢您.

amazon-ec2 volumes mongodb docker ubuntu-14.04

5
推荐指数
2
解决办法
5563
查看次数

何时重用 docker-compose 即时卷与重新创建?

我有一个这样的 docker-compose.yml:

version: '2'
services:
  app:
    build: .
    volumes:
      - /usr/src/app
Run Code Online (Sandbox Code Playgroud)

如果我这样做docker-compose up,那么我对 /usr/src/app 所做的任何更改都会在运行中保持不变。可以control+C然后docker-compose up,内容还在。

但如果我这样做docker-compose run app ls -la /usr/src/app,那么路径总是空的。

我的目标是,我希望该卷 1) 自动为我自动创建,2) 特定于这个 docker-compose 项目(因为我会有很多其他项目),并且 3) 在 docker-compose up 中持续存在/运行/等。

我认为解决这个问题的一种方法是使用命名卷,它会自动提取我的 docker-compose 项目的名称。

但是对于动态容器,这是预期的行为吗?它们会自动持续存在docker-compose up,并为每个docker-compose run?

另外,是否有任何文档明确了动态容器的生命周期?

谢谢!

volumes docker-compose

5
推荐指数
0
解决办法
544
查看次数

docker 容器上的持久性 /etc/passwd

我创建了一个 docker 镜像,允许用户使用 SSH 连接它。

出于安全原因,我希望用户可以更改他们的密码。我只使用 docker 命名的卷,所以我无法绑定 /etc/passwd 并且我不想挂载所有 /etc

有任何想法吗?提前致谢。

linux mount passwd volumes docker

5
推荐指数
2
解决办法
6282
查看次数

docker 中针对 macOS 中卷的相对路径绑定确实失败

我正在使用 docker-compose 并且我想创建一个相对的双路径绑定。

Folder structure and path at the host machine:
/Users/username/Documents/Repos/docker-gulp-template/bla
docker-gulp-template
  Dockerfile
  docker-compose.yml
  Bla (Folder)

Run Code Online (Sandbox Code Playgroud)
Path structure inside the container:

/usr/src/html/bla

Run Code Online (Sandbox Code Playgroud)
version: '3'
services:
  bla:
    command: /bin/bash    
    stdin_open: true
    #tty: true
    container_name: docker-gulp-template
    #restart: always
    build: .
    ports:
      - '80:3000'
    volumes:
      - "/bla:/usr/src/html/bla"
Run Code Online (Sandbox Code Playgroud)

这确实会导致错误。

ERROR: for docker-gulp-template  Cannot start service bla: b'Mounts denied: \r\nThe path /bla\r\nis not shared from OS X and is not known to Docker.\r\nYou can configure shared paths from Docker -> Preferences... -> File Sharing.\r\nSee …
Run Code Online (Sandbox Code Playgroud)

macos path volumes docker docker-compose

5
推荐指数
1
解决办法
5494
查看次数

有条件地在 docker-compose 中挂载卷以适应多种情况

我使用 docker 和 docker compose 将科学工具打包成易于/通用的可执行模块。一个例子是一个 docker,它将一个相当复杂的 python 库打包到一个运行 jupyter notebook 服务器的容器中;这个想法是,其他不太精通技术的科学家可以克隆一个 github 存储库,运行docker-compose up然后进行分析,而无需安装库、配置各种插件和其他依赖项等。

我让这一切工作正常,只是我在让卷安装以连贯的方式工作时遇到问题。这样做的原因是 docker 容器内的库处理多种数据集,用户将这些数据集存储在几个单独的目录中,这些目录通常通过 shell 环境变量进行跟踪。(请不要告诉我这是一个糟糕的方法——这是在现场做事的方式,而不是我选择的做事方式。)因此,例如,如果用户存储 FreeSurfer 数据,它们将有一个名为 SUBJECTS_DIR 的环境变量,指向包含数据的目录;如果他们存储 HCP 数据,他们将有一个环境变量 HCP_SUBJECTS_DIR。但是,他们可能同时拥有这些集合,或者两者都没有(以及其他一些)。

我希望能够在我的 docker-compose.yml 文件中放置类似的内容以处理这些情况:

version: '3'
services:
   my_fancy_library:
      build: .
      ports:
         - "8080:8888"
      environment:
         - HCP_SUBJECTS_DIR="/hcp_subjects"
         - SUBJECTS_DIR="/freesurfer_subjects"
      volumes:
         - "$SUBJECTS_DIR:/freesurfer_subjects"
         - "$HCP_SUBJECTS_DIR:/hcp_subjects"
Run Code Online (Sandbox Code Playgroud)

在对此进行测试时,如果用户设置了两个环境变量,则一切正常。但是,如果他们没有这些设置中的一个,我会收到一个关于不安装长度少于 2 个字符的目录的错误(我认为这是对安装由“:/hcp_subjects”指定的卷的抱怨)。

这个问题问的基本相同,答案指向这里,如果我理解正确的话,它基本上解释了如何以某种方式解决多个 docker-compose 文件。由于以下几个原因,这对于我的案例来说并不是一个真正可行的解决方案:

  • 这个工具是为那些不一定了解 docker、docker-compose 或相关实用程序的人设计的,所以期望他们编写/编辑自己的 docker-compose.yml 文件是一个问题
  • 这些目录不止两个(我已经展示了两个作为示例),我实际上无法为这些已声明或未声明的路径的每个可能组合制作一个 docker-compose 文件
  • 老实说,考虑到所需的信息就在 docker-compose 已经读取的变量中,这个解决方案看起来真的很笨拙。

我能够想出的唯一体面的解决方案是要求用户运行脚本./run.sh而不是docker-compose up; 该脚本检查环境变量,docker-compose.yml用适当的卷写出自己的文件,然后 …

configuration volumes docker dockerfile docker-compose

5
推荐指数
2
解决办法
2722
查看次数

向 Docker 容器提供配置文件的推荐方式

我正在将我们的 Web 应用程序转移到 docker-compose 部署(Django、DRF、AngularJS)。

Docker 现在看起来很稳定,一切进展顺利。

我想要:

  • 与您确认我正在遵循有关应用程序配置文件的最佳实践
  • 知道“卷文件”是否实际上是绑定挂载,不推荐这样做

我已经设法使用环境变量和从 Djangosettings.py文件读取的 docker-compose 机密,并且它可以工作。缺点是环境变量仅限于简单的字符串,并且在发送 Python 列表、字典等时可能会带来一些转义挑战。我们还必须定义和维护大量环境变量,因为我们的 Web 应用程序安装在很多地方并且具有高度可配置性。

在前端(AngularJS),我们有两个constants.js文件和 nginx conf。我在 Dockerfile 中使用过CMD ["/start.sh"]并有一些sed命令。但这看起来真的很黑客,这也意味着我们必须定义和维护相当多的环境变量。

  1. 对于这些配置文件使用 Docker 卷是个好主意吗?

  2. “卷文件”之类的东西是否确实存在此处提到)或者它实际上是绑定安装?绑定挂载不太推荐,因为它们依赖于主机上的文件系统和文件路径。

Volumes 文档简要提到了文件:“文件或目录在容器中安装的路径”,但没有详细介绍。

我们的网络应用程序现在有简单的配置文件:

  • settings.py
  • site\contants.js
  • admin\constants.js

和:

  1. 我想避免将这些文件移动到可以安装的专用目录。

  2. 您能给我展示一个带有单个文件卷(不是绑定安装)的示例 docker-compose.yml 吗

谢谢

django volumes docker docker-compose

5
推荐指数
1
解决办法
8926
查看次数

添加卷后 Docker 变慢(Wordpress)

我想使用 Docker 进行本地开发。当我使用 Docker Compose 创建 Wordpress 容器时,所有内容都在浏览器中加载得非常快。它比使用 Local by Flywheel 快得多。问题是我无权访问 Wordpress 文件。为了访问这些文件,我将卷添加到 docker-compose.yml 中:

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

我现在可以访问这些文件,但是浏览器中的所有内容加载速度都很慢,以至于使用 Docker 失去了意义。是否有可能以任何方式加快速度?

wordpress volumes docker docker-compose

5
推荐指数
1
解决办法
4355
查看次数