我正在尝试dockerize一个PHP应用程序。在dockerfile中,我下载存档,提取它,等等。
一切都很好。但是,如果发布了一个新版本,并且我更新了dockerfile,我必须重新安装应用程序,因为config.php会被覆盖。
因此,我认为我可以将该文件作为卷挂载,就像对数据库所做的那样。
我尝试了两种方法,用音量和直接路径。
docker-compose:
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文件夹。不是文件。
或者是否有另一种方法来持久化配置?
对于像我这样使用Windows容器的人来说,要知道不能使用Windows容器绑定或挂载单个文件。
The following examples will fail when using Windows-based containers, as the destination of a volume or bind mount inside the container must be one of: a non-existing or empty directory; or a drive other than C:. Further, the source of a bind mount must be a local directory, not a file.
net use z: \\remotemachine\share
docker run -v z:\foo:c:\dest ...
docker run -v \\uncpath\to\directory:c:\dest ...
docker run -v c:\foo\somefile.txt:c:\dest ...
docker run -v c:\foo:c: ...
docker run -v c:\foo:c:\existing-directory-with-contents ...
很难发现,但它就在那里
链接到关于将文件映射到Windows容器的Github问题
对于像我这样使用Windows容器的人来说,要知道不能使用Windows容器绑定或挂载单个文件。
The following examples will fail when using Windows-based containers, as the destination of a volume or bind mount inside the container must be one of: a non-existing or empty directory; or a drive other than C:. Further, the source of a bind mount must be a local directory, not a file.
net use z: \\remotemachine\share
docker run -v z:\foo:c:\dest ...
docker run -v \\uncpath\to\directory:c:\dest ...
docker run -v c:\foo\somefile.txt:c:\dest ...
docker run -v c:\foo:c: ...
docker run -v c:\foo:c:\existing-directory-with-contents ...
很难发现,但它就在那里
链接到关于将文件映射到Windows容器的Github问题