BranchCacheを停めてみる

 

WSL2上でDockerコンテナを -p 80:80 で建てたときに、http://localhost/ で接続出来ない時の対処法です。

80/tcpを塞いでいるのがBranchCacheサービスの場合で、単純にサービスを停めただけでは復活してしまう場合に本手法が使えるかと思います。


対処前の状態

C:\>netstat -ano | findstr :80
TCP 0.0.0.0:80 0.0.0.0:0
:
:


対処方法

  1. services.mscを起動し、BranchCacheサービスを停止/無効化します
  2. gpedit.mscを起動し、ローカルコンピューターポリシー→コンピューターの構成→管理用テンプレート→ネットワーク→BranchCache→BranchCacheを有効にする、に進み、無効を選択、適用します
  3. OSを再起動します

  4. netstat -ano | findstr :80 にて、80/tcpが空いていることを確認下さい

以上です。

docker: Error response from daemon: cgroups: cannot find cgroup mount destination: unknown.

 

WSL2(Ubuntu)上でのDockerコンテナ起動時にcgroupのエラーが出るときがあります。

root@hoge:~# docker run –name web -d -p 10080:80 nginx:alpine
docker: Error response from daemon: cgroups: cannot find cgroup mount destination: unknown.
root@hoge:~#

ハードコーディングしても問題無い場合は、次のスクリプトを適当な名前で/etc/profile.dに置いて下さい。

root@hoge:~# cat /etc/profile.d/hoge.sh
#!/bin/sh
PASSWORD=suでrootになれるパスワード
if [ ! -d /sys/fs/cgroup/systemd ]; then
  echo $PASSWORD | sudo -S mkdir /sys/fs/cgroup/systemd 2>/dev/null
fi
mountpoint -q /sys/fs/cgroup/systemd || echo $PASSWORD | sudo -S mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

パスワードを残したく無い場合で、手打ちで対応出来る場合は、次のコマンドをWSL2起動の都度、叩いて下さい。

sudo mkdir /sys/fs/cgroup/systemd
mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

Dockerコンテナのresolv.confやhostnameの変更が有効にならない

 

単純に/etc/resolv.confを変更しても、暫くすると、

# cat /etc/resolv.conf
# This configuration is written to the config.iso
nameserver 192.168.65.1

な状態に戻ってしまいます。

この場合、docker run に –dns=使いたいDNSサーバのIPアドレス オプションを付けて起動して下さい(ハードコードになりますので、違う環境に持って行く場合は注意)。

また、このときにProxyの内側の環境でコンテナの構築を行う必要がある場合は、環境変数や各種設定ファイル内でProxyサーバをFQDNではなくIPアドレスで指定してあげて下さい。

また、/etc/hostnameを変更しても、暫くすると元に戻ってしまいます。
ここも、docker run に –hostname=設定したいホスト名 オプションを付けて起動して下さい。

WSL2 on Hyper-V

 

20H1の19041が出ましたね。

Hyper-V上でWSL2との組み合わせを試そうとして、

Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。

と言われてしまったときは、(以前【https://www.takosuke.net/hyper-v上に20h1を作ってみる/】にも記しましたが)ホストマシン上で管理者権限なPowerShellを開いて、

Set-VMProcessor -VMName <VM名> -ExposeVirtualizationExtensions $true

を行ってから、こちらを参考にWSL2のmsiをインストールした後、“wsl –set-version”を試みてみて下さい。

 

Proxy環境下のWSL2でdockerを入れられないとき

Windows 10 20H1 (18990) + Ubuntu 18.04.3 LTS(WSL2化済み)な環境で、リポジトリにdownload.docker.comを追加後のapt updateで、

The repository ‘https://download.docker.com/linux/ubuntu bionic Release’ does not have a Release file.

が出た場合、Proxyの設定(特にhttps用のProxy)を見直してみて下さい。