VSCode+DockerでPython環境をつくろうとしてハマった話 ※5/19補足あり

技術,Python,RemoteContainer,VisualStudioCode

VSCode+DockerでサクッとPython環境を作って実行するのを試そうとしたら、おかしなところでハマったので、その記録を残しておきます。

発端

発端はVisualStudio CodeとDockerでコンテナ上に環境を作ってデバッグ、実行するRemote Containerというプラグインを試そうと思い、以下のWeb記事をお題にしてみようと作業を進めたのですが…

いざコンテナを作ろうとするとエラーが出ます。以下はコマンドラインで直接実行した時のエラーログです。VSCodeで実行した時も同じです。

% docker build .      
[+] Building 30.7s (3/3) FINISHED                                               
 => [internal] load build definition from Dockerfile                       0.4s
 => => transferring dockerfile: 36B                                        0.0s
 => [internal] load .dockerignore                                          0.5s
 => => transferring context: 2B                                            0.0s
 => ERROR [internal] load metadata for docker.io/library/python:3.9.5-bu  30.0s
------
 > [internal] load metadata for docker.io/library/python:3.9.5-buster:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to do request: Head https://registry-1.docker.io/v2/library/python/manifests/3.9.5-buster: proxyconnect tcp: dial tcp 192.168.65.1:3128: i/o timeout
woinary@MacBook-Pro(x86_64) Python3 % docker network inspect
"docker network inspect" requires at least 1 argument.
See 'docker network inspect --help'.

コンテナでの開発環境の作成については、以下のサイトを参考にしました。ここのReopen in containerをするところで、上記のエラーが出ます。

色々調べて試してみたが…

色々調べると、DNSをGoogleの8.8.8.8に変えるとか、Docker Engineの設定ファイルを直すとか、色々出てくるのですが、何をやっても改善しません。
すでにあるイメージをコンテナで動かす分には問題ないのですが、Docker Hubから新しくイメージを取ってくるところで謎のエラーが出てうまくいきません。
Dockerの再起動したり、Mac自体を再起動しても改善しません。

DockerのFactory Resetをするという話もあったためダメもとで試したものの、Docker自体が起動しなくなってしまいました。

仕方ないので、Dockerを一度アンインストールしてからインストールし直して、ようやく復旧しました。

本来の件は問題なし

その後、本来やりたかった件を試しましたが、こちらは問題なし。

本来の部分とは違うところですこぶる手こずったのは予想外でした。しかし、特に難しいことをしなくても、元の環境を汚さずにサクッとPythonの入った環境を作成して、動かすことができるのですから素晴らしいです。

なお、現在の状況に合わせて、いくつか変えたところもあります。

まず、Pythonのバージョンが新しくなっているので、3.9.5を指定しています。

FROM python:3.9.5-buster

当然ながら中身はDebianです。10.9でした。

# cat /etc/issue
Debian GNU/Linux 10 \n \l
# cat /etc/debian_version
10.9

自分で指定したので当然ですが、Python 3.9.5です。

# python --version
Python 3.9.5

このような感じでVSCode上で編集、実行できます。

VSCodeの画面
VSCodeの画面

なお、このDebianのコンテナ自体には、3.9.5を含め、3つのPythonが入っているようで、少し無駄ですね。公式コンテナを今回使いましたが、自前で作った方がよいかもしれません。サイズは832MBでした。

root@f1d429e91f2b:/workspaces/Python3# python --version
Python 3.9.5
root@f1d429e91f2b:/workspaces/Python3# /usr/bin/python --version
Python 2.7.16
root@f1d429e91f2b:/workspaces/Python3# /usr/bin/python3 --version
Python 3.7.3
root@f1d429e91f2b:/workspaces/Python3# 

5/19補足

その後、またアップデートしたら動かなくなりました。色々やって、以下の2つのオプションを無効に変更して動くようになりました。
おかげで何回かダウングレードしてはアップグレードを繰り返してしまいました。

まず、Dockerが起動しなくなる件については設定画面のGeneralの「Use gPRC FUSE for file sharing」のONをOFFに変えました。これはアップデートしてからだとDockerが起動できないので、ダウングレードして設定を変更してからアップグレードしました。

Docker設定画面(General)
Docker設定画面(General)

これでDockerは動くようになりましたが、イメージがとって来れないので、設定画面のExperimental Feauturesの「」をONからOFFに変えました。これでようやく、問題なく正常動作するようになりました。

Docker設定画面(Experimental Futures)
Docker設定画面(Experimental Futures)

ここに行き着くまでに、Googleで検索したり、Twitterで検索したりと、随分とあれこれ探し回ることになりました。

2021-05-19技術Docker,Python,RemoteContainer,VisualStudioCode

Posted by woinary