2016-12-27 16 views
5

私は大学2年生で作成したプロジェクトをDockerizeとOpen Sourceにしようとしていますが、このプロジェクトではMariaDB、phpMyAdmin、PHP/Yii Frameworkを使用しています。ドッカーボリュームMariaDB Windows

私の目的は、単純な docker-compose up コマンドを使用して準備を整えることです。

phpMyAdminとDBが接続されていて、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-compose.ymlをしたいですorkに依存します。

他の質問も似ていますが、私の探していないWindows上の絶対パスの問題が原因です。

EDIT:あなたMount a host directory as a data volume正しい最終ドッカ-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 
+0

しかし、 '/ var/lib/mysql'はLinuxのパスです! – Hackerman

+0

@Hackerman '/ var/lib/mysql'はホストマシン上にないDockerコンテナ内のパスです – Daniel

答えて

4

を助けることができる、ドキュメントが言うとき:

host-dirは、絶対することができパスまたは名前の値。 host-dirの絶対パスを指定すると、Dockerは指定したパスにバインドマウントします。名前を指定すると、Dockerはその名前で名前付きボリュームを作成します。

名前値はa-z0-9続い英数字、_(下線)、.(ピリオド)または-(ハイフン)で開始しなければなりません。
絶対パスは/(スラッシュ)で始まります。

これは、エラーメッセージを説明しています。

パスドッキングウィンドウで.envファイルを作成します。「Running a docker-compose “Getting Started” example causes “Invalid volume specification” on Windows」で述べたように、絶対パスlinks it to the OS(あなたが望むものではありません)

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

を使用して

、最初にこのdocker-compose environment variableを設定してみてください - 構成する。YMLは、次の内容で配置されている:

COMPOSE_CONVERT_WINDOWS_PATHS=1 

OP DanielCOMPOSE_CONVERT_WINDOWS_PATHS含む.env、相対パスはを動作することを確認in the comments

代わりにdata volumeという名前を使用することをお勧めします。ホストのパス名には依存しません。

+0

相対パスはオプションではありませんか? – Daniel

+1

@Daniel厳密には、ホストの場合、相対パスなし:絶対パスまたはボリューム名のみです。 – VonC

+0

実際に相対パスが機能します!私はちょうどあなたの提案に従い、 'COMPOSE_CONVERT_WINDOWS_PATHS = 1'を.envに追加する必要がありました!私はあなたに恩恵を与えることができるようにあなたの答えを更新できますか? – Daniel