WSL2でLinuxに固定IPを追加する

開発マシン上WSL2/Alpine/docker-composeでkafkaを動かそうとしたら手間取ったので、備忘録。

  • WSL2で動かすLinuxのIPアドレスはホストWindowsによってプライベートアドレスを与えられ、Windows起動の度に変わる(おそらくセキュリティ向上のため)
  • DHCPはLinux起動時にWSL2で特別な処理が行われているようで、/etc/network/interfaceに記載してもおそらく無視される
  • /etc/network/interfaceに書かれた内容はLinux起動後ifdown/ifupコマンドでstaticは反映されるが、DHCPはサーバーが見つからない理由でエラーになる
  • 上記DHCPが失敗した状態では、WSL2ホストマシン外と通信できない(Hyper-Vの仮想スイッチ設定をいじればできる?)
  • 一方dockerコンテナ上のkafkaは、ADVERTISED_HOST設定のため毎回変わるアドレスでは運用しづらい
Hyper-Vの仮想スイッチをいじると他のLinuxディストリビューションと併用する時に副作用が出そうなので、対象Linuxにプライベート固定アドレスを追加する方法を採る。アドレス例として
  • 192.168.99.1: WSL2ホスト側のアドレス(=Windows)
  • 192.168.99.100: Windowsから見たLinux側のアドレス

Windows側

仮想スイッチ'vEthernet (WSL)'はWSL2起動時に作成されるようなので、先にLinuxディストリビューションを起動しておく。このスイッチにホストWindowsのアドレスを追加。要管理者権限。Windows再起動ごとに行う。
 netsh interface ip add address "vEthernet (WSL)" 192.168.99.1 255.255.255.0

Linux側(dockerホスト on WSL2)

Linuxに固定アドレスを与える。要root。こちらもLinux起動ごとに必要。
ip addr add 192.168.99.100/24 dev eth0

Linux側(docker-compose)

wurstmeister/kafka-dockerLink を使用。docker-compose.yml変更点は
  • kafkaのportsを9092:9092に
  • KAFKA_ADVERTISED_HOST_NAMEを書き換え

docker-compose後はホストWindowsからはbootstrap-server=192.168.99.100:9092でkafkaにアクセス可能。

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
    restart: unless-stopped

  kafka:
    build: .
    ports:
      - "9092:9092"
    environment:
      DOCKER_API_VERSION: 1.22
      KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

[参考]

— posted by mu at 07:53 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0082 sec.
prev
2023.4
next
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30