我正在尝试 dockerize 一个 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 文件夹。不是文件。
还是有另一种方式来持久化配置?
原文由 Jakub Juszczak 发布,翻译遵循 CC BY-SA 4.0 许可协议
文件卷在 docker 中以这种方式完成(绝对路径示例(可以使用 env 变量),您需要提及文件名):
你也可以这样做:
如果您从
/src/docker/myapp
文件夹中触发 docker-compose