【问题标题】:Volume share from container to host docker-compose从容器到主机 docker-compose 的卷共享
【发布时间】:2017-07-29 23:59:35
【问题描述】:

我正在尝试在容器和主机之间共享数据。所以我只想这样做来存储容器文件。数据必须从容器共享到主机。

我的 docker-compose.yml

version: "3.3"
services:
  django:
    image: python:slim
    volumes:
      - type: volume
        source: ./env
        target: /usr/local/lib/python3.6/site-packages
        volume:
          nocopy: true
      - ./src:/usr/src/app
    ports:
      - '80:80'
    working_dir: /usr/src/app
    command: bash -c "pip install -r requirements.txt && python manage.py runserver"

当我运行 docker 时会抛出这个:

错误:django 无法为服务 django 创建容器:无效 绑定挂载规范 “/Users/gustavoopb/git/adv/env:/usr/local/lib/python3.6/site-packages:nocopy”: 无效的卷规格: '/Users/gustavoopb/git/adv/env:/usr/local/lib/python3.6/site-packages:nocopy': 类型“绑定”的无效装载配置:字段 VolumeOptions 不能是 指定的错误:启动项目时遇到错误。

https://docs.docker.com/compose/compose-file/#long-syntax-3

【问题讨论】:

    标签: django docker docker-compose


    【解决方案1】:

    您正在尝试将命名卷语法与绑定挂载一起使用。我会将您的语法切换为:

    version: "3.3"
    services:
      django:
        image: python:slim
        volumes:
          - type: bind
            source: ./env
            target: /usr/local/lib/python3.6/site-packages
          - ./src:/usr/src/app
        ports:
          - '80:80'
        working_dir: /usr/src/app
        command: bash -c "pip install -r requirements.txt && python manage.py runserver"
    

    注意type 的变化和nocopy 选项的缺失。不支持将文件从映像复制到主机绑定,这仅适用于命名卷。

    【讨论】:

      【解决方案2】:

      当我的容器出现故障时,我的问题是保留 python 环境。为此,我需要共享容器内的环境来托管。我尝试了 docker docs 建议,但没有奏效。

      volume: 
          nocopy: true
      

      我的解决方案: 我创建了一个命名容器。

      version: "2"
      
      services:
        django:
          image: python:2.7
          command: bash -c "pip install -r requirements.txt && python manage.py collectstatic --no-input && python manage.py migrate && python manage.py runserver 0.0.0.0:80"
          env_file:
            - .env
          volumes:
            - .:/app
            - env:/Library/Python/2.7/site-packages
          links:
            - database
          ports:
            - "8000:80"
          working_dir: /app
      
      volumes:
        env:
      

      【讨论】:

        【解决方案3】:

        文档中指定的卷没有在服务中使用,而是在服务外部指定。尝试从卷中删除最后一行:

        volume:
          nocopy: true
        

        【讨论】:

        • 确认!删除volume: nocopy: true 选项后使用相同文件时不存在该错误。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-21
        • 1970-01-01
        • 2022-08-17
        相关资源
        最近更新 更多