首页 文章

如何在卷中装入单个文件

提问于
浏览
82

我试图将一个php应用程序停靠 . 在dockerfile中我下载了存档,提取它等 .

一切正常,但是如果新版本发布,我更新dockerfile我必须重新安装应用程序,因为config.php被覆盖 .

所以我认为我可以将文件挂载为卷,就像我对数据库一样 .

我尝试了两种方式,包括音量和直接路径 .

泊坞窗 - 撰写:

version: '2'
services:
  app:
    build: src
    ports:
      - "8080:80"
    depends_on:
      - mysql
    volumes:
      -  app-conf:/var/www/html/upload
      -  app-conf:/var/www/html/config.php
    environment:
      DB_TYPE: mysql
      DB_MANAGER: MysqlManager

  mysql:
    image: mysql:5.6
    container_name: mysql
    volumes:
      - mysqldata:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD:
      MYSQL_DATABASE:
      MYSQL_USER:
      MYSQL_PASSWORD:

volumes:
  mysqldata:
  app-conf:

这导致错误:

我用一个给定的路径尝试了它,作为一个装载的音量 .

/src/docker/myapp/upload:/var/www/html/upload
/src/docker/myapp/upload:/var/www/html/config.php

但是两种方式都不起作用 . 使用已安装的卷,我看到上传已创建 .

但随后失败了

/var/www/html/config.php \“导致\”不是目录\“\”“

如果我用/src/docker/myapp/upload/config.php:/var/www/html/config.php试试

Docker创建上传文件夹,然后创建config.php文件夹 . 不是文件 .

或者还有另一种方法来保持配置?

5 回答

  • 0

    我在Windows上遇到了同样的问题, Docker 18.06.1-ce-win73 (19507) .

    通过Docker设置面板删除并重新添加共享驱动器,一切都恢复正常 .

  • 0

    我一直在遭遇类似的问题 . 我试图将我的配置文件导入到我的容器中,以便我可以在每次需要时修复它而无需重新构建映像 .

    我的意思是我认为下面的命令会将 $(pwd)/config.py 从Docker主机映射到 /root/app/config.py 作为文件进入容器 .

    docker run -v $(pwd)/config.py:/root/app/config.py my_docker_image
    

    但是,它始终创建名为 config.py 的目录,而不是文件 .

    在寻找线索时,我找到了原因(来自here

    如果使用-v或--volume绑定安装Docker主机上尚不存在的文件或目录,-v将为您创建 endpoints . 它始终作为目录创建 .

    因此,它始终作为目录创建,因为我的docker主机没有 $(pwd)/config.py .

    即使我在docker host中创建config.py . $(pwd)/config.py 刚刚覆盖 /root/app/config.py 未导出 /root/app/config.py .

  • 108

    对我来说,问题是我在试图装入容器的文件上有一个破损的符号链接

  • 42

    文件卷在docker中以这种方式完成(绝对路径示例(可以使用env变量),你需要提到文件名):

    volumes:
          - /src/docker/myapp/upload:/var/www/html/upload
          - /src/docker/myapp/upload/config.php:/var/www/html/config.php
    

    你也可以这样做:

    volumes:
          - ${PWD}/upload:/var/www/html/upload
          - ${PWD}/upload/config.php:/var/www/html/config.php
    

    如果从 /src/docker/myapp 文件夹中激活docker-compose

  • 0

    我在Windows 8.1上遇到同样的问题

    事实证明,这是由于路径的区分大小写 . 我从目录 cd /c/users/alex/ 调用 docker-compose up ,并在容器内部将文件转换为目录 .

    但当我做 cd /c/Users/alex/ (不是用户大写)并从那里调用 docker-compose up 时,它起作用了 .

    在我的系统中,用户dir和Alex dir都是大写的,尽管看起来只有用户dir很重要 .

相关问题