Docker卷MariaDB Windows
我正在尝试Dockerize和Open Source这个我在大学二年级时创build的项目,这个项目使用了MariaDB,phpMyAdmin和PHP / Yii Framework。
我的目标是准备好只使用一个简单的docker-compose up
命令。
我设法让phpMyAdmin和数据库之间的连接工作,现在我试图让Docker有一个数据库卷的相对path,以保持一致。
这是我有关于卷装:
volumes: - './database/mysql/:/var/lib/mysql'
这是将数据库文件存储在项目中,然后我可以忽略.gitignore
的这些文件问题是,当我运行docker-compose up
这个configuration我得到:
Invalid volume specification: 'C:\Users\MySelf\coding\my_app\database\mysql:/var/lib/mysql:rw'
关于主机,我正在使用Docker Toolbox的Windows,但是我希望docker-compose.yml
能够在任何操作系统下工作。
我已经看到了类似的其他问题,但他们的错误来自Windows上的绝对path的问题,我不寻找。
编辑:添加正确的最终docker-compose.yml,希望它可以帮助
version: '2' services: web_db: build: ./database/mysql command: "mysqld --innodb-buffer-pool-size=20M" volumes: - ./database/mysql/data/:/var/lib/mysql - ./database/mysql/initDB/create_tables.sql:/docker-entrypoint-initdb.d/create_tables.sql environment: MYSQL_ROOT_PASSWORD: 'YOURPASSWORD' MYSQL_DATABASE: 'support-technique' MYSQL_ROOT_HOST: '172.17.0.1' ports: - "3306:3306" container_name: web_db web: build: . depends_on: - web_db links: - web_db:db ports: - "80:80" phpmyadmin: image: phpmyadmin/phpmyadmin depends_on: - web_db links: - web_db:mysql ports: - "8181:80" environment: PMA_HOST: mysql
将主机目录挂载为数据卷时 ,文档中提到:
host-dir
可以是绝对path或名称值。 如果您为host-dir
提供绝对path,则Docker绑定到您指定的path。 如果您提供了一个名称,Docker将通过该名称创build一个指定的卷。名称值必须以字母数字字符开头,后跟
a-z0-9
,_
(下划线)a-z0-9
(句点)或-
(连字符)。
绝对path以/
(正斜杠)开头。
这解释了错误信息。
使用绝对path将其链接到操作系统 (这不是你想要的)
docker run -vc:\<path>:/c:\<container path> docker run -v /c/<path>:/c:\<container path>
正如在“ 运行docker-compose”入门“示例导致”Windows上的卷描述无效 “中所述,请先尝试设置此docker-compose环境variables :
在path中创build
.env
文件.env
-compose.yml放置以下内容:
COMPOSE_CONVERT_WINDOWS_PATHS=1
OP Daniel 在评论中证实, 使用.env
包括COMPOSE_CONVERT_WINDOWS_PATHS
,相对path起作用 。
我会build议使用数据卷名称:它不会依赖于主机path名。