あちゃちゃ~、Docker DesktopをSSH経由でbuildしようとして見事にハマった話
🤦♂️ やっちまった...
いや~、やらかしました。AI Host Clubシステムの改修が完了して、「よし、Docker化して本番デプロイだ!」と意気込んでいたんですが...
kentaro@DESKTOP-IO4IKSV C:\Users\kentaro\Downloads\docker\20250528_aihostclub>docker-compose build
[+] Building 0.9s (2/2) FINISHED
=> ERROR [ai-host-club internal] load metadata for docker.io/library/python:3.11-slim
------
failed to solve: python:3.11-slim: failed to resolve source metadata for docker.io/library/python:3.11-slim: error getting credentials - err: exit status 1, out: `error getting credentials - err: exit status 1, out: `A specified logon session does not exist. It may already have been terminated.``
え?なにこれ??
😅 最初の反応:「またDockerがおかしくなった」
最初に思ったのは「またDockerの調子悪いのかな...」でした。開発者あるあるですよね。
- Docker Desktopを再起動してみよう
docker system prune
してみよう- ネットワーク設定を確認してみよう
でも、全然ダメ。むしろ状況が悪化してる感じ。
docker : パス 'docker' は、コマンドレット、関数、スクリプト ファイル、
または操作可能なプログラムの名前として認識されません。
あれ?Dockerコマンド自体が認識されない??
🤔 「あ、そうか!」の瞬間
で、ふと気づいたんです。
「あ、これSSH接続から実行してるじゃん...」
普段、開発はSSH経由でリモートマシンにアクセスして作業することが多いので、何となく同じ感覚でDocker操作もSSHからやろうとしてたんですよね。
でも、試しにローカルのDocker Desktop Commander(普段あんまり使わない)から同じコマンドを実行してみたら...
[+] Building 45.2s (15/15) FINISHED
=> [ai-host-club internal] load build definition from Dockerfile
=> => transferring dockerfile: 1.15kB
=> [ai-host-club internal] load .dockerignore
=> ...
=> [ai-host-club] exporting to image
Successfully built ai-host-club
あっさり成功!
「あちゃちゃ~、なんで??」状態です。
🧐 原因を調べてみた
なぜSSH経由だとダメで、ローカルだと成功するのか?調べてみました。
Docker Desktopの認証システム
どうやらDocker DesktopはWindows統合認証システムを使っているらしく:
- GUI環境での認証が前提
- Docker DesktopはWindowsデスクトップセッションで動作
-
ローカルユーザーの認証情報を使用
-
セッション分離の問題
- SSH接続は別のセキュリティコンテキスト
-
リモートセッションからはWindows資格情報ストアにアクセスできない
-
エラーメッセージの意味
A specified logon session does not exist. It may already have been terminated.
これって「ログインセッションが見つからない」ってことだったんですね...
なるほど、そういうことか!
つまり:
【ローカル(Docker Desktop)】
✅ Windows統合認証 → 正常動作
✅ GUI環境のセッション → 認証情報アクセス可能
【SSH経由】
❌ リモートセッション → 認証情報分離
❌ コンソール環境 → GUI依存機能に制限
🤡 完全に勘違いしてた件
恥ずかしい話、僕は完全に勘違いしてました:
「DockerってLinuxコマンドみたいに、どこからでも同じように使えるでしょ?」
でも実際は:
「Docker DesktopはWindowsアプリケーションで、固有の制約があります」
考えてみれば当たり前なんですけどね...
😂 類似体験:「僕だけじゃないはず」
こういう経験、他の人もあるんじゃないでしょうか?
- 「なんでCIで動くのにローカルで動かないの?」
- 「本番では成功するのに開発環境でエラーになる」
- 「Windowsだと動くのにMacだと...」
環境固有の制約って、ドキュメントに書いてあっても見落としがちですよね。
📚 学んだこと
1. 環境の使い分けが大事
【SSH経由でやるべきこと】
✅ git pull/push
✅ ファイル編集(vim, nano)
✅ 設定ファイル管理
✅ ログ確認
【ローカル(Docker Desktop)でやるべきこと】
✅ docker-compose build
✅ docker-compose up/down
✅ Dockerイメージ管理
✅ コンテナデバッグ
2. エラーメッセージをちゃんと読む
error getting credentials - err: exit status 1
A specified logon session does not exist
最初は「また謎エラーか...」と思ったけど、よく読むと認証の問題って書いてあるんですよね。
エラーメッセージ、ちゃんと読まないとダメですね(反省)。
3. プラットフォーム固有の制約を理解する
Docker Desktopは:
- クロスプラットフォームだけど
- 各OS固有の実装がある
- 統合認証システムに依存している
「Docker = どこでも同じ」じゃないんだなと。
🔧 今後の開発フロー
この経験を踏まえて、開発フローを見直しました:
1. 【SSH】 git pull でコード更新
2. 【ローカル】 Docker Desktop Commander でbuild & up
3. 【SSH】 ログ確認やファイル編集
4. 【ローカル】 必要に応じてdown & up
5. 【SSH】 git commit & push
要は適材適所ってことですね。
😅 最後に:恥ずかしいけど共有
正直、この失敗はかなり恥ずかしいです。
「Docker使い始めて何年経ってるのに、こんな基本的なこと知らなかったの?」
でも、こういう「あちゃちゃ」体験って、意外と同じことで悩んでる人がいるんじゃないかと思うんです。
特に:
- Windows + Docker Desktop環境
- SSH経由での開発に慣れている
- 「なんで動かないの?」でハマってる
そんな人の参考になれば、恥を忍んで共有した甲斐があります。
💡 教訓
「ツールの制約を理解せずに使うと、思わぬところでハマる」
当たり前のことなんですけど、普段うまく動いてると忘れがちですよね。
今回の件で、改めて:
- 環境依存の仕組みを理解する大切さ
- エラーメッセージを丁寧に読む重要性
- 思い込みで判断しない姿勢
を学びました。
皆さんも似たような「あちゃちゃ」体験があったら、ぜひ教えてください!
一緒に「やっちまった話」で盛り上がりましょう 😄
この記事は実体験に基づく内容です。同じようなトラブルで悩んでいる方の参考になれば幸いです。