kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

wslとwindowsのファイル共有について

docker for windowsを試しているところですが、ファイル周りでうまくいかないところが多い気がします。

個人的にどうなっているのか調べている内容の記録を書いてみます。

windowsとdocker

dockerがどこで動いているのか気になっていましたが、どうやらwsl2上のプロセスで動作しているらしいです。

windows上で

docker-compose up -d

wslのubuntuにログインして「ps aux | grep docker」で確認してみると、起動している内容が確認できます。

また「docker ps」で起動している内容をみてもwindowsで起動した内容が作られているためあっていると思います。

ファイル共有

Cドライブが wsl(ubuntu)の「/mnt/c/」にマウントされているのを確認。

ファイルを作成もできるし、フォルダ作成もできます。

作成ユーザーはwindowsのログインユーザーで作成されます。

dockerユーザー

いつできたのかちゃんと把握していないが、windowsのユーザーにdockerユーザーができていた。docker for windowsをインストール時に作成したかもしれない。覚えてない。

現在困っている内容は、volumesの部分で相対パス指定時に書き込みされないことと速度がでないことです。

dockerユーザーで起動させればいけるかと思いましたが、権限上書き込みできると思いましたがダメでした。

wsl上のフォルダでdocker-compose

wsl2にログインして、ホームディレクトリに移動。

docker-compose.ymlを作成

version: '3'
services:
  db:
    image: postgres:9.6.15
    environment:
      - POSTGRES_USER=app
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=app
      - LC_ALL=C
    ports:
      - '5432:5432'
    volumes:
      - ./docker/postgres/db:/var/lib/postgresql/data

docker-composeで起動させてみると、dockerフォルダが作成され、dbが初期化されます。

windowsからlocalhostでアクセスできたため、あとで速度の調査をしてみます。

フォルダの所有者はroot:rootで作成されていました。

このあたりが影響しているのかdockerの起動ユーザーや/mnt/c/内の書き込み権限が影響しているのか、「db」のフォルダは所有者が999(docker)になっていたり、そのままの設定で動作する感じではなさそうですね。

昔、vagrantを使っていた時は仮想環境にsambaでアクセスをするようにして速度改善を試みていましたが、wslでも同じことする必要がありそうです。

windows側を開発環境にするより、wsl上に開発環境を整えたほうが幸せになりそうな気がしてます。

いろいろとやり方が出てきてからまた検討しようかな。

wsl上にファイル群を置いて、dockerで起動したwebアプリケーションの動作が早ければwsl上に開発環境を作成するほうこうに切り替えようと思います。