動機
大学の授業でC言語のGUIアプリを開発することになった。GUIライブラリはGTKを利用することにした。 Windows向けにGTKアプリを開発するには、Msys2をインストールして環境を整える必要がある。 しかし、ローカル環境を汚したくなかったので、DevContainerで開発することにした。 WindowsのDockerはWSL2上で動作しており、WSL2にはWSLgというGUIアプリを動かすための仕組みがある。 これを利用してDevContainerでGUIアプリを開発してみようと思う。
注意
DevContainerを理解していることを前提としている。
そのため、DevContainerの基本的な説明は省略する。
また、本稿ではimageにmcr.microsoft.com/devcontainers/base:debianを利用している。
WSLのアップデート
まず、WSLを最新バージョンにアップデートする。 私はWSLをアップデートしていなかったため、ここで躓いた。
wsl --update
Dockerの設定
Docker Desktopで、WSL Integrationを有効にする。

DevContainerの設定
DevContainerのdocker-compose.ymlに以下を追記する。
サービス名は適宜変更すること。
services:
devcontainer:
volumes:
- type: bind
source: /tmp/.X11-unix
target: /tmp/.X11-unix
- type: bind
source: /mnt/wslg
target: /mnt/wslg
environment:
- DISPLAY=$DISPLAY
- WAYLAND_DISPLAY=$WAYLAND_DISPLAY
- XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR
- PULSE_SERVER=$PULSE_SERVER
DevContainerの立ち上げ
以上で設定は完了。
DevContainerを立ち上げて、GUIアプリを実行してみる。

追記
日本語を扱うGUIアプリを動かす場合、フォントが必要になる。 以下のコマンドでコンテナにGoogle Noto Sans Japaneseフォントをインストールする。
apt install fonts-noto-cjk
参考サイト
- WSL を使用して Linux GUI アプリを実行する | Microsoft Learn
- 【WSL 2】dockerコンテナでGUIアプリを実行してWindowsで表示させたい | DevelopersIO
編集履歴
- 2025-12-04: imageに関する記述を追加