EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

Dockerで開発環境を構築する際のハマりポイントと助けられた記事のまとめ

目的

今の職場では、各自が好きなやり方で開発環境を構築していますが、
それを今後効率化するためにDockerで自動構築できるようにする
ことを提案しました。

その中でいくらかハマったことがあったのですが、既に公開されてる
数々のブログ記事やGitHubのDockerファイルを参考にさせて
いただきました。

今回の記事では、自分が実際にハマったポイントと、それの解決に
役立ったブログ記事をまとめようと思います。

目次

ハマりポイントリスト

1. Windows10のWSL上でGUIアプリが表示できない

職場での都合上、自分が使っていたPCのOSが当時はWindows10であり、
そこでWSLを起動し、その中でDocker + ROSというのが当時の作戦でした。

まずはこちらの記事を参考に、GUIアプリを表示するための設定を仕込んだ
上でDockerコンテナを起動できるようにしたのですが、
qiita.com blog.kinto-technologies.com

記事中で解説されているようなX11の設定だけでは足りないということが
後から分かりました。それは、こちらの記事に書かれているように、
ホスト側とコンテナ側でユーザIDを一致させないといけないということです。
zenn.dev zenn.dev

そのためにはまず、こちらの記事を参考にRoot以外のユーザーとして
ログインできるようにする必要があります。
e-penguiner.com

これらの設定が抜けていると、Dockerコンテナ上ではrootでログインした
状態になり、その際のユーザIDはホスト側と異なるものになってしまうので、
今回のような問題が起きてしまいます。

2. サービスの名前設定が抜けてるとコンテナが起動しない

普段Dockerコンテナを起動する際はVSCodeのDev Containerを利用している
のですが、
code.visualstudio.com

その際はdevcontainer.jsonというファイルにコンテナ側での各種設定を記述
する必要があります。その中でコンテナ上で起動するサービスの名前を
設定するのですが、
containers.dev

これはdocker-compose.ymlを使う場合、そちらにも同様に記述しておく
必要があります。記述が抜けていたり間違えていて、devcontainer.json側との
設定に違いがあるとコンテナが起動しなくなるので注意が必要です。

3. Dev Containerで起動したコンテナ内でGPUが認識されない

DockerコンテナでGPUを認識させるにはこちらの記事にあるような設定を
入れることにより実現できます。
lilaboc.work lilaboc.work qiita.com

ただし、これらの設定はNativeのLinuxやWSL上で起動してるDockerコンテナで
の話であり、VSCodeのDev Containerから起動したコンテナでは機能しないと
いうことを発見しました。

これについては未だに解決策を見つけられていないので、この記事を見て
解決策をご存じの方がいたら是非教えてほしいです。

4. DockerコマンドがPermission deniedで使えない

$ docker versionなどのDockerコマンドがPermission deniedで実行できない
という問題にも出くわしました。これはDockerを最初にインストールした
後だったのですが、このままだとインストール後の動作確認が出来ない
ので、こちらの記事にある方法で解決しました。
qiita.com akamist.com

5. Permissionが変わっただけのファイルがGitで変更扱いになる

必要に応じて環境に入れ込んだ外部ファイルも含めてビルドした際に、
それら外部ファイルのパーミッションが変更され、大量にGitで変更扱いに
なってしまう問題がありました。

ファイル自体の中身は何も変更していないにもかかわらずこうなって
しまうので、こちらの記事を参考にして、パーミッションが変更になった
だけのファイルはGitで変更扱いさせないようにしました。
scrapbox.io