概要
以下のような状況に陥ったので、同様の問題に出くわした方のために記事を書きました。
- devcontainerでコンテナを立ち上げる際にエラー発生
- docker imageのbuildまでは成功し、エラー発生はその直後
- 重要なエラーメッセージのありかが分からず、原因不明のまま数時間経過
- エラーメッセージさえ見つかれば即解決できた
環境
Mac OSのM2チップ搭載マシンで発生。
ただし、今回のエラーはたとえwindowsだとしても発生する。
症状
devcontainerを使ってフォルダを開くと、docker imageがbuildされる。
image build終了後は、containerが立ち上がるはずのところ、エラーが発生した。
具体的には、以下のように「コンテナーの設定中にエラーが発生しました。」というメッセージが表示された(ローカルPCがMacの場合)。
これだけだと何もわからないので、「ローカルでdevcontainer.jsonを編集」ボタンを押下する。
すると、VSCode上で、/Users/user_name/Library/Application Support/Code/logs/20230602T154843/window14/exthost/ms-vscode-remote.remote-containers/remoteContainers-2023-06-02T08-09-38.668Z.log
のようなログファイルを確認することができる。
以下で見てみよう。
エラー詳細
ログの最後の方には以下のようなログが残っていた。
[2023-06-02T07:51:15.786Z] Writing docker-compose.devcontainer.containerFeatures-1685692275786.yml to /Users/user_name/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/docker-compose
[2023-06-02T07:51:15.787Z] Start: Run: docker-compose --project-name test_devc -f /Users/user_name/src/test_devc/docker-compose.yml -f /Users/user_name/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/docker-compose/docker-compose.devcontainer.build-1685692274286.yml -f /Users/user_name/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/docker-compose/docker-compose.devcontainer.containerFeatures-1685692275786.yml up -d
[2023-06-02T07:51:15.908Z] WARN[0000] Found orphan containers ([base_container]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
[2023-06-02T07:51:15.929Z] [+] Running 0/0
[2023-06-02T07:51:15.929Z] ⠋ Container base_container Creating 0.0s
Error response from daemon: Conflict. The container name "/base_container" is already in use by container "fecca7d84a9a3db1bc067ca277ab248dededfed63cf4ce92ea75b79474a6fb36". You have to remove (or rename) that container to be able to reuse that name.
[2023-06-02T07:51:15.932Z] Stop (145 ms): Run: docker-compose --project-name test_devc -f /Users/user_name/src/test_devc/docker-compose.yml -f /Users/user_name/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/docker-compose/docker-compose.devcontainer.build-1685692274286.yml -f /Users/user_name/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/docker-compose/docker-compose.devcontainer.containerFeatures-1685692275786.yml up -d
[2023-06-02T07:51:15.933Z] Error: Command failed: docker-compose --project-name test_devc -f /Users/user_name/src/test_devc/docker-compose.yml -f /Users/user_name/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/docker-compose/docker-compose.devcontainer.build-1685692274286.yml -f /Users/user_name/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/docker-compose/docker-compose.devcontainer.containerFeatures-1685692275786.yml up -d
[2023-06-02T07:51:15.933Z] at _se (/Users/user_name/.vscode/extensions/ms-vscode-remote.remote-containers-0.292.0/dist/spec-node/devContainersSpecCLI.js:1912:3061)
[2023-06-02T07:51:15.933Z] at process.processTicksAndRejections (node:internal/process/task_queues:96:5)
[2023-06-02T07:51:15.933Z] at async Bse (/Users/user_name/.vscode/extensions/ms-vscode-remote.remote-containers-0.292.0/dist/spec-node/devContainersSpecCLI.js:1894:3170)
[2023-06-02T07:51:15.933Z] at async Xse (/Users/user_name/.vscode/extensions/ms-vscode-remote.remote-containers-0.292.0/dist/spec-node/devContainersSpecCLI.js:1961:2799)
[2023-06-02T07:51:15.933Z] at async vh (/Users/user_name/.vscode/extensions/ms-vscode-remote.remote-containers-0.292.0/dist/spec-node/devContainersSpecCLI.js:1961:3741)
[2023-06-02T07:51:15.933Z] at async gae (/Users/user_name/.vscode/extensions/ms-vscode-remote.remote-containers-0.292.0/dist/spec-node/devContainersSpecCLI.js:2092:10213)
[2023-06-02T07:51:15.933Z] at async mae (/Users/user_name/.vscode/extensions/ms-vscode-remote.remote-containers-0.292.0/dist/spec-node/devContainersSpecCLI.js:2092:9954)
[2023-06-02T07:51:15.935Z] Stop (6397 ms): Run: /Users/user_name/Downloads/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) --ms-enable-electron-run-as-node /Users/user_name/.vscode/extensions/ms-vscode-remote.remote-containers-0.292.0/dist/spec-node/devContainersSpecCLI.js up --user-data-folder /Users/user_name/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --container-session-data-folder /tmp/devcontainers-d22458b3-ff1e-4b34-8584-350447dbf9761685692268456 --workspace-folder /Users/user_name/src/test_devc --workspace-mount-consistency cached --id-label devcontainer.local_folder=/Users/user_name/src/test_devc --id-label devcontainer.config_file=/Users/user_name/src/test_devc/.devcontainer/devcontainer.json --log-level debug --log-format json --config /Users/user_name/src/test_devc/.devcontainer/devcontainer.json --default-user-env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root true
[2023-06-02T07:51:15.935Z] Exit code 1
[2023-06-02T07:51:15.936Z] Command failed: /Users/user_name/Downloads/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) --ms-enable-electron-run-as-node /Users/user_name/.vscode/extensions/ms-vscode-remote.remote-containers-0.292.0/dist/spec-node/devContainersSpecCLI.js up --user-data-folder /Users/user_name/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --container-session-data-folder /tmp/devcontainers-d22458b3-ff1e-4b34-8584-350447dbf9761685692268456 --workspace-folder /Users/user_name/src/test_devc --workspace-mount-consistency cached --id-label devcontainer.local_folder=/Users/user_name/src/test_devc --id-label devcontainer.config_file=/Users/user_name/src/test_devc/.devcontainer/devcontainer.json --log-level debug --log-format json --config /Users/user_name/src/test_devc/.devcontainer/devcontainer.json --default-user-env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root true
[2023-06-02T07:51:15.937Z] Exit code 1
最初は、上記ログのうち下から2行目が重要なエラー文言だと思っていた。そこにばかり集中して試行錯誤していたため、いつまでも手掛かりは見つからず。
しかし実際には、上から6行目が根本的な原因だった。
※下から2行目にはCommand failed:
と書いてあり、一見するとここでエラーが発生したようにも読めるが、これは原因ではなく、その手前のどこかに根本的な原因が書かれているはず。そこを注意して探す。
私の場合は、このメッセージ内から根本原因を見つけることはできなかったので、次のような試行錯誤をした。1
対応策
今回は、devcontainer.json
からdocker-compose.yml
を呼び出していたので、試しに
- devcontainerを使わずに直接
docker-compose.yml
を呼び出し
たところ、以下のように簡易なエラーメッセージが出力され、原因がすぐにわかった。
% docker-compose up
WARN[0000] Found orphan containers ([base_container]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
[+] Running 0/0
⠋ Container base_container Creating 0.0s
Error response from daemon: Conflict. The container name "/base_container" is already in use by container "fecca7d84a9a3db1bc067ca277ab248dededfed63cf4ce92ea75b79474a6fb36". You have to remove (or rename) that container to be able to reuse that name.
上記のメッセージを読むとcontainer
の名前が被っていることが原因と書かれている。
そこで、docker-compose.yml
のcontainer_name
を変更したところ、当初のエラーも含めて全て解消した。
結論
結局、devcontainerはエラーとは関係なかった。
単に、devcontainerのせいでエラーが読みにくくなっていただけだった。
devcontainer抜きでコンテナを立ち上げてみるのも手の一つかもしれない。
参考
参考にはならなかったけれども、以下のGitHub issueと同様のエラーが発生していた。
この人のエラーは結局解消していない。
-
実際には、最初の長いエラーメッセージよく読めば、根本原因も記載されている。しかし、長すぎて、自分にはどこが重要なのかわからなかった。 ↩