如何在卷中安装单个文件
对于docker工人来说,我是相当新的,有些卷的概念对我来说是相当混乱的。
我想要做的是dockerize一个PHP应用程序。 在dockerfile中我下载了档案,解压缩等等。
一切工作正常,但是如果一个新版本获得释放,我更新dockerfile我不得不重新安装应用程序,因为config.php被覆盖。
所以我想我可以挂载文件作为一个卷,就像我对数据库做的一样。
我尝试了两种方式,一个音量和一个直接的path。
泊坞窗 – 撰写:
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:
这会导致错误:
我试着用一个给定的path,作为一个挂载的音量。
/src/docker/myapp/upload:/var/www/html/upload /src/docker/myapp/upload:/var/www/html/config.php
然而这两种方式都不起作用。 随着装入卷我看到上传被创build。
但随后失败
/var/www/html/config.php \\“导致\\”不是目录\\“”\“”
如果我用/src/docker/myapp/upload/config.php:/var/www/html/config.php
Docker创build上传文件夹,然后创build一个config.php文件夹。 不是一个文件。
还是有另一种方法来persitconfiguration?
在docker(绝对path示例(可以使用envvariables),并且需要提及文件名)中以这种方式完成文件卷的操作:
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
我曾经遭受类似的问题。 我试图导入我的configuration文件到我的容器,以便我可以修复它,而不需要重新构build图像。
我的意思是我以为下面的命令会将容器中的/root/app/config.py
导入到Docker主机上的$(pwd)/config.py
文件中。
docker run -v $(pwd)/config.py:/root/app/config.py my_docker_image
但是,它总是创build一个名为config.py
的目录而不是文件。
一边寻找线索,我发现原因(从这里 )
如果使用-v或-volume绑定挂载Docker主机上尚不存在的文件或目录,则-v将为您创build端点。 它始终是作为一个目录创build的。
正如你所看到的,它总是被创build为一个目录,因为我的docker主机没有$(pwd)/config.py
。
即使我在Docker主机中创buildconfig.py。 $(pwd)/config.py
只是/root/app/config.py
不导出/root/app/config.py
。