我正在尝试将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文件夹。不是文件。
还是有另一种方法来保留配置?
TL; DR /通知: 如果您遇到尝试创建的目录来代替要挂载的文件,则可能无法提供 有效 且 绝对的 路径。这是一个无声且令人困惑的故障模式的常见错误。
如果您遇到尝试创建的目录来代替要挂载的文件,则可能无法提供 有效 且 绝对的 路径。这是一个无声且令人困惑的故障模式的常见错误。
在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
/src/docker/myapp