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名。