我正在尝试将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文件夹。不是文件。
还是有另一种方法来保留配置?
如果您遇到尝试创建的目录来代替要挂载的文件,则可能无法提供 有效 且 绝对的 路径。这是一个无声且令人困惑的故障模式的常见错误。
在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
我正在尝试对接一个PHP应用程序。在dockerfile中,我下载归档文件,解压缩文件,等等。 一切正常。但是,如果发布了一个新版本,并且我更新了dockerfile,我就必须重新安装应用程序,因为config.php会被覆盖。 所以我想我可以将文件装入一个卷,就像我对数据库所做的那样。 然而,这两种方式都行不通。有了装入的卷,我看到上传被创建了。 但它失败的原因是: /var/www/html/
问题内容: Docker文档指出,可以将单个文件装载到Docker容器中: -v标志还可用于从主机挂载单个文件-而不是目录。 这会将您放入新容器中的bash外壳中,您将从主机获得bash历史记录,退出容器时,主机将具有在容器中键入命令的历史记录。 但是,当我尝试将文件挂载为目录时: 我的Dockerfile看起来像这样: Docker版本为1.9.1,内部版本为a34a1d5。 这是文档问题,还是
-v标志还可以用于从主机装入单个文件(而不仅仅是目录)。 这将使您进入一个新容器中的bash shell,您将获得来自主机的bash历史记录,当您退出容器时,主机将获得在容器中键入的命令的历史记录。 Docker版本为1.9.1,版本为A34A1D5。 这是一个文件问题,是我这边的一个误解,还是有其他的事情发生了?
问题内容: 我在android项目中使用docker作为GitLab CI运行器。在测试运行结束时,将测试结果保存在build目录下的xml和html中: 我想访问这些文件,但是文档中没有提到如何像那样装载卷。 问题答案: 我建议不要从主机为您的CI装入卷。如果确实需要,则必须相应地配置运行器()。如果使用的是运行程序,则永远不会知道要在哪个系统上执行特定的构建。 我认为更好的解决方案是将测试结果
对于本地开发人员,我需要在Docker容器中装入一个不同的配置文件。使用命令行就很容易实现。是否可以从文件中的(使用创建)执行此操作?
问题内容: 示例(为简便起见,省略了许多选项): 这是错误的,因为没有名称名称的卷,这意味着该卷名称必须是文件的完整路径(即,您不能在该卷名称后附加路径)? 尝试设置只会返回错误。 有没有办法将单个文件安装到容器中? 问题答案: 您不能在命名卷中装入文件或子目录,源是命名卷或主机路径。NFS本身,以及您将在Linux中挂载的大多数文件系统,都要求您挂载整个文件系统,而不是单个文件,当下降到inod