はじめに
こんにちは!
株式会社BFT名古屋支店・インフラ女子(?)のやまぐちです。
普段WindowsのPC上でお仕事をする人にとって、困るのは「何かしらの開発をするとき」です。クラウドでシステムを開発するようになってインフラエンジニアでもその「何かしら」の機会はどんどん増えてきました。
頻度が低ければ、サクラエディタなどでシェルを書いたり、実装先のサーバ上でサクッと作ったりしますが、頻度が高い&複数人で開発するときは何より安全な開発とコードのデプロイを重視し、きちんとした開発環境を整えなければ、という気持ちになります。
前置きが長くなりましたが、作りたいのは以下図のような構成です。
Windows上でLinux環境を実行するための「WSL2(Windows Subsystem for Linux)」を使って、「Docker Desktop WSL 2 backend on Windows」で起動したコンテナを開発環境とします。そしてそのコンテナへVisualStudio Code(VSCode)の拡張機能を使って接続したり、コードをGUIで書いたりします。
今回はこの構成で発生した「docker endpoint for "default" not found」のエラー解決方法を備忘として残します。
「docker endpoint for "default" not found」を解決する!
解決方法
サクッと解決方法です。
以下ディレクトリにある「meta.json」を削除します。
C:\Users\<ユーザ名>.docker\contexts\meta\XXXXXX\meta.json
この「XXXXXX」部分は任意の長い文字列です。.dockerディレクトリにcontextsしかない場合は.dockerディレクトリから全削除しても問題ありません。
発生した状況
この事象はVSCodeから拡張機能を使ってコンテナ起動・接続する際に発生しました。起動するコンテナはVSCodeのWorkspace配下「.devcontainer」ディレクトリ内の「Dockerfile」で規定され、「devcontainer.json」にはVSCodeからコンテナに接続するための設定が記載されています。
以下はWindows側のディレクトリ構成です。ansibleの開発環境として使いたいので、VSCodeのWorkplaceはこのansibleディレクトリがルートです。
ansible |--- .git |___ .devcontainer | |--- devcontainer.json | |___ Dockerfile |___ src |--- site.yml |___ roles ・・・
今回発生したエラーはDockerfileの記載内容が原因のようでした。
当初はイメージをalpineで指定しており、手動でイメージを作って確認してはいたものの、catコマンドがbashではなくashで実行されていてエラーになっていた模様。
イメージを軽くしたくてalpineにしていたので、断念してcentosで作成し直し。同様に何度かRUN部分で指定しているコマンドの問題で同事象が発生したものの、meta.jsonの削除か.dockerディレクトリの削除で、次回コンテナ起動時は問題ありませんでした。
うまくいったDockerfile↓↓
FROM centos:centos7 RUN yum install -y openssh-server \ openssh-clients RUN yum install -y epel-release RUN yum install -y ansible RUN useradd ansibleuser -p ansibleuser \ && su - ansibleuser \ && mkdir ansible WORKDIR /home/ansibleuser/ansible
.dockerディレクトリって?
公式ページには以下のように記載されています。
Docker コマンドラインは、ホームディレクトリ $HOME にある .docker ディレクトリ内に保管されている設定ファイルを、デフォルトで使います。
Docker は設定用ディレクトリ内にある大部分のファイルを管理しますので、自分ではこれらを変更すべきではありません。
実際にコンテナを起動できた後の.dockerディレクトリ内です。
誤ったファイルを削除しないように気を付けましょう。
終わりに
今回はdocker起動時のエラー「docker endpoint for "default" not found」を解決する方法をまとめました。構成などは別記事で今後まとめていきます。
ここまで読んでいただきありがとうございました~ ^ ^