我试图将一个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 回答
我在Windows上遇到了同样的问题,
Docker 18.06.1-ce-win73 (19507)
.通过Docker设置面板删除并重新添加共享驱动器,一切都恢复正常 .
我一直在遭遇类似的问题 . 我试图将我的配置文件导入到我的容器中,以便我可以在每次需要时修复它而无需重新构建映像 .
我的意思是我认为下面的命令会将
$(pwd)/config.py
从Docker主机映射到/root/app/config.py
作为文件进入容器 .但是,它始终创建名为
config.py
的目录,而不是文件 .在寻找线索时,我找到了原因(来自here)
因此,它始终作为目录创建,因为我的docker主机没有
$(pwd)/config.py
.即使我在docker host中创建config.py .
$(pwd)/config.py
刚刚覆盖/root/app/config.py
未导出/root/app/config.py
.对我来说,问题是我在试图装入容器的文件上有一个破损的符号链接
文件卷在docker中以这种方式完成(绝对路径示例(可以使用env变量),你需要提到文件名):
你也可以这样做:
如果从
/src/docker/myapp
文件夹中激活docker-compose我在Windows 8.1上遇到同样的问题
事实证明,这是由于路径的区分大小写 . 我从目录
cd /c/users/alex/
调用docker-compose up
,并在容器内部将文件转换为目录 .但当我做
cd /c/Users/alex/
(不是用户大写)并从那里调用docker-compose up
时,它起作用了 .在我的系统中,用户dir和Alex dir都是大写的,尽管看起来只有用户dir很重要 .