Docker 卷 MariaDB Windows

Docker volumes MariaDB Windows

我正在尝试 Docker 开源我在大学二年级创建的项目,该项目使用 MariaDB、phpMyAdmin 和 PHP/Yii 框架。

我的 objective 是让它准备好只使用一个简单的 docker-compose up 命令。

我设法让 phpMyAdmin 和数据库之间的连接正常工作,现在我一直在尝试让 Docker 拥有数据库卷的相对路径,以使其保持一致。

这是我关于卷安装的信息:

volumes:
  - './database/mysql/:/var/lib/mysql'

这是将数据库文件存储在项目中,然后我可以忽略 .gitignore 中的那些文件 问题是当我使用此配置 运行 docker-compose up 时,我得到:

Invalid volume specification: 'C:\Users\MySelf\coding\my_app\database\mysql:/var/lib/mysql:rw'

关于主机,我正在使用 Windows 和 Docker 工具箱,但我希望 docker-compose.yml 能够工作,而不管 OS。

我见过其他类似的问题,但它们的错误来自 Windows 上的绝对路径问题,我不在寻找。

编辑:添加正确的最终 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

当您 Mount a host directory as a data volume 时,文档说:

The host-dir can either be an absolute path or a name value. If you supply an absolute path for the host-dir, Docker bind-mounts to the path you specify. If you supply a name, Docker creates a named volume by that name.

A name value must start with an alphanumeric character, followed by a-z0-9, _ (underscore), . (period) or - (hyphen).
An absolute path starts with a / (forward slash).

解释错误信息。

使用绝对路径links it to the OS(这不是你想要的)

docker run -v c:\<path>:/c:\<container path>
docker run -v /c/<path>:/c:\<container path>

如“", try first setting this docker-compose environment variable:

Create .env file in the path docker-compose.yml is placed with following content:

COMPOSE_CONVERT_WINDOWS_PATHS=1

.env包括COMPOSE_CONVERT_WINDOWS_PATHSOP Daniel confirms ,相对路径有效

我建议改用 data volume 名称:它不依赖于主机路径名。