web-dev-qa-db-ja.com

WindowsマシンでDockerデータボリュームにアクセスするにはどうすればよいですか?

私が持っています docker-compose.yml このような:

version: '3'
services:
  mysql:
    image: mysql
    volumes:
      - data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=$ROOT_PASSWORD

volumes:
  data:

そして、私のマウントポイントは次のようになります:/var/lib/docker/volumes/some_app/_dataそして、そのマウントポイントからデータにアクセスしたいのですが、Windowsマシンでそれを行う方法がわかりません。 Docker仮想マシンからディレクトリにデータを渡すことができる追加のコンテナを作成できるかもしれませんか?

このようにフォルダをマウントする場合:

volumes:
  - ./data:/var/lib/mysql

ローカルディレクトリを使用する-アクセス許可の問題のため、成功しませんでした。そして、「正しい方法」はDockerボリュームを使用していることを読んでください。

UPD:MySQLコンテナは単なる例です。このような動作をコードベースに使用し、dockerfoeローカル開発を使用したいと思います。

8

WindowsでのLinuxコンテナの場合、dockerはLinux仮想マシン上で実際に実行されるため、namedボリュームはのローカルディレクトリのマッピングです。そのVMコンテナ内のディレクトリに。

したがって、/var/lib/docker/volumes/some_app/_dataとして取得したのは、そのVM内のディレクトリです。それを検査するには、次のことができます。

docker run --rm -it -v /:/vm-root Alpine:Edge ls -l /vm-root/var/lib/docker/volumes/some_app/_data
total 188476
-rw-r-----    1 999      ping            56 Jun  4 04:49 auto.cnf
-rw-------    1 999      ping          1675 Jun  4 04:49 ca-key.pem
-rw-r--r--    1 999      ping          1074 Jun  4 04:49 ca.pem
-rw-r--r--    1 999      ping          1078 Jun  4 04:49 client-cert.pem
-rw-------    1 999      ping          1679 Jun  4 04:49 client-key.pem
-rw-r-----    1 999      ping          1321 Jun  4 04:50 ib_buffer_pool
-rw-r-----    1 999      ping      50331648 Jun  4 04:50 ib_logfile0
-rw-r-----    1 999      ping      50331648 Jun  4 04:49 ib_logfile1
-rw-r-----    1 999      ping      79691776 Jun  4 04:50 ibdata1
-rw-r-----    1 999      ping      12582912 Jun  4 04:50 ibtmp1
drwxr-x---    2 999      ping          4096 Jun  4 04:49 mysql
drwxr-x---    2 999      ping          4096 Jun  4 04:49 performance_schema
-rw-------    1 999      ping          1679 Jun  4 04:49 private_key.pem
-rw-r--r--    1 999      ping           451 Jun  4 04:49 public_key.pem
-rw-r--r--    1 999      ping          1078 Jun  4 04:49 server-cert.pem
-rw-------    1 999      ping          1675 Jun  4 04:49 server-key.pem
drwxr-x---    2 999      ping         12288 Jun  4 04:49 sys

これは、そのVM /のホールルートファイルシステムをコンテナディレクトリ/vm-rootにマウントした補助コンテナを実行しています。

いくつかのファイルを取得するには、バックグラウンドでいくつかのコマンド(私の場合はtail -f /dev/null)を使用してコンテナーを実行し、docker cpを使用できます。

docker run --name volume-holder -d -it -v /:/vm-root Alpine:Edge tail -f /dev/null
docker cp volume-holder:/vm-root/var/lib/docker/volumes/volumes_data/_data/public_key.pem .

そのVMへの透過的なSSHが必要な場合は、2017年6月の時点でまだサポートされていないようです。 ここ 港湾労働者のスタッフがそう言った。

11
Robert