当前位置: 首页 > 知识库问答 >
问题:

如何在卷中装入单个文件

郑安晏
2023-03-14

我正在尝试对接一个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创建upload文件夹,然后创建config.php文件夹。不是文件。

还是有其他方法可以持久化配置?

共有1个答案

管玉堂
2023-03-14

如果您在试图挂载的文件的位置上创建了一个目录,那么您可能没有提供一个有效的绝对路径。这是一个常见的错误与沉默和混乱的失败模式。

文件卷在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
 类似资料:
  • 问题内容: 我正在尝试将php应用程序码头化。在dockerfile中,我下载了存档,将其解压缩等。 一切正常,但是如果发布了新版本,并且我更新了dockerfile,则必须重新安装该应用程序,因为config.php被覆盖了。 因此,我以为可以像将数据库一样将文件挂载为卷。 我尝试了两种方式,分别是体积和直接路径。 码头工人组成: 导致错误: 我尝试使用给定的路径(已安装的卷)进行尝试。 但是,

  • -v标志还可以用于从主机装入单个文件(而不仅仅是目录)。 这将使您进入一个新容器中的bash shell,您将获得来自主机的bash历史记录,当您退出容器时,主机将获得在容器中键入的命令的历史记录。 Docker版本为1.9.1,版本为A34A1D5。 这是一个文件问题,是我这边的一个误解,还是有其他的事情发生了?

  • 对于本地开发人员,我需要在Docker容器中装入一个不同的配置文件。使用命令行就很容易实现。是否可以从文件中的(使用创建)执行此操作?

  • 这是我当前的DockerFile: 我的项目是这样的:

  • 问题内容: 我正在创建一个轻量级的单文件数据库管理工具,我希望将一些小图标与其捆绑在一起。将图像嵌入HTML / PHP文件的最佳方法是什么? 我知道一种使用PHP的方法,在该方法中,我将使用GET参数调用同一文件,该参数将输出具有正确标头的硬编码二进制数据,但这似乎有点复杂。 我可以使用某些东西直接在CSS 声明中传递图像吗?这将允许我利用CSS Sprite技术。 浏览器支持在这里不是问题,因

  • 问题内容: Docker文档指出,可以将单个文件装载到Docker容器中: -v标志还可用于从主机挂载单个文件-而不是目录。 这会将您放入新容器中的bash外壳中,您将从主机获得bash历史记录,退出容器时,主机将具有在容器中键入命令的历史记录。 但是,当我尝试将文件挂载为目录时: 我的Dockerfile看起来像这样: Docker版本为1.9.1,内部版本为a34a1d5。 这是文档问题,还是