あちゃちゃ~、Docker DesktopをSSH経由でbuildしようとして見事にハマった話

あちゃちゃ~、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統合認証システムを使っているらしく:

  1. GUI環境での認証が前提
  2. Docker DesktopはWindowsデスクトップセッションで動作
  3. ローカルユーザーの認証情報を使用

  4. セッション分離の問題

  5. SSH接続は別のセキュリティコンテキスト
  6. リモートセッションからはWindows資格情報ストアにアクセスできない

  7. エラーメッセージの意味
    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経由での開発に慣れている
- 「なんで動かないの?」でハマってる

そんな人の参考になれば、恥を忍んで共有した甲斐があります。

💡 教訓

「ツールの制約を理解せずに使うと、思わぬところでハマる」

当たり前のことなんですけど、普段うまく動いてると忘れがちですよね。

今回の件で、改めて:
- 環境依存の仕組みを理解する大切さ
- エラーメッセージを丁寧に読む重要性
- 思い込みで判断しない姿勢

を学びました。


皆さんも似たような「あちゃちゃ」体験があったら、ぜひ教えてください!

一緒に「やっちまった話」で盛り上がりましょう 😄


この記事は実体験に基づく内容です。同じようなトラブルで悩んでいる方の参考になれば幸いです。