Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
68
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@endo_hizumi

WSLでDocker for windowsを使うッ!!!

初めに

この記事はッ!!
bashが使いたい系男子がッ!!
WSLでDocker for Windowsを設定する記事であるッ!!(ババン

ずっとこのノリだと疲れるので、
以降は、普通に行きますね。

前提

  • Docker for Windowsがインストール済みである。
  • Windows Subsystem for Linux(WSL)が使える状態である。

環境

WSL(Ubuntu 18.04 LTS)

ツール名 バージョン
docker 18.09.7
docker-compose 1.24.0

Windows 10 (version 1809)

ツール名 バージョン
docker desktop community 2.0.0.3
docker machine 0.16.1
docker engine 18.09.2

使う目的

なんで、わざわざWSLを使うのか。WindowsでBash使いたいじゃん??
後、ネットだとUnix系の情報が多いので。そっちの方が楽かなと。

WSLからDocker for Windowsのデーモンを呼び出す。

WSL環境だけで、Dockerを動かす手法は存在するのですが、
まだ、最新のDockerが動かなかったり、WSLを落とすと死ぬとか
ひと手間必要な印象がありますので、WSLのDocker ClientからDockerを呼び出します。

  1. 通知領域から、dockerのアイコンを右クリックして、Settingを選択
  2. Generalのexpose deamon on~~のチェックを入れます。 image.png これで、Docker for WindowsのDocker DeamonがTCP経由でアクセスできるようになりました。(without TLSって書いてあるから、TLS利用でできるのかも)
Convertfrom-Json (Invoke-WebRequest http://localhost:2375/version).content

Platform      : @{Name=Docker Engine - Community}
Components    : {@{Name=Engine; Version=18.09.2; Details=}}
Version       : 18.09.2
ApiVersion    : 1.39
MinAPIVersion : 1.12
GitCommit     : 6247962
GoVersion     : go1.10.6
Os            : linux
Arch          : amd64
KernelVersion : 4.9.125-linuxkit
BuildTime     : 2019-02-10T04:13:06.000000000+00:00
  1. WSLの.bashrcと.bash_profileに、以下を追加します。
.bashrc
echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc
.bash_profile
if [[ -f ~/.bashrc ]] ; then
    . ~/.bashrc
fi

これで、WSL上からDocker for Windowsを使うことができます。

Docker for windowsで、Cドライブをマウントする。

  1. 通知領域から、dockerのアイコンを右クリックして、Settingを選択
  2. Shared DrivesでCのチェックを入れます。 image.png
  3. Windowsのユーザー名とパスワードの入力を求められるので、入力します。
  4. セキュリティソフトのファイアウォールにブロックされるので、通信を許可してもらいます。 image.png
    具体的な手順は、「docker for windows shared drives ファイアウォール」で、ググるといくつか出てきたので、リンクを張り付けておきます。

WSLのマウント先を変更する

Windowsで直接使うのなら、上記の設定まで行えば完了です。
しかし、WSLで使うなら、Windowsのディレクトリがマウントされない問題があるので、ひと手間必要です。(実際は、絶対パスでWindows風のパスを書けば、マウントできる)

Windowsのディレクトリがマウントされない問題

以下のように、DockerのVolume設定が相対パスで指定されていると、
WSLのDockerクライアントまたはDocker-Composeで、コンテナを起動させると
/mnt/c以下がマウントされない問題があります。

これは、Docker for Windowsが動いているHyper-V上のLinuxとWSLのWindowsのドライブのマウント先が異なることによって起きる問題です。
(Hyper-VのLinuxでは、Cドライブが、/cにマウント
WSLだと、Cドライブが/mnt/cにマウントされる。)

WSLのDocker-Composeはこのマウント先の相違を吸収せずに、そのままDockerに渡してしまうので、空のディレクトリがマウントされてしまうのです。
(Hyper-V上では、/mnt/cにCドライブがマウントされていないため空になる)

そのため、Windowsディレクトリのマウント位置を一致させれば、問題は解決します。
具体的には、下記のように編集します。
標準のマウントポイントを/に変更

/etc/wsl.conf
[automount]
root = "/"  

反映しないときは

2019/12/06 追記
以下のコマンドを管理者権限で実行して、WSLを再起動する。

net stop LxssManager
net start LxssManager

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
68
Help us understand the problem. What are the problem?