★悩み★
・docker build実行時にNewConnectionErrorのエラーで失敗する。
・docker build実行時にNewConnectionErrorが発生する原因を知りたい。
・NewConnectionErrorが発生しないようにする手順を知りたい。
こういった「悩み」に答えます。
★本記事の内容★
① docker build実行時にNewConnectionErrorのエラーが発生する原因を紹介
② docker build時のエラー(NewConnectionError)に対する対処手順を紹介
これからご紹介する「docker buildでNewConnectionErrorのエラーで失敗」を実践したことで、10分以内で「docker build時のエラー(NewConnectionError)を解決」できました。
記事の前半では「docker build実行時にNewConnectionErrorのエラーが発生する原因」を解説しつつ、記事の後半では「docker build時のエラー(NewConnectionError)に対する対処手順」を紹介します。
この記事を読み終えることで、「NewConnectionErrorでdocker buildに失敗するトラブルを解消できる」状態になります。
docker build実行時にNewConnectionErrorのエラーが発生する原因
「docker build実行時にNewConnectionErrorのエラーが発生する原因」に関してご説明します。
具体的なエラー内容と発生原因に関して説明しますね。
筆者は、以下のDockerfileを用いてコンテナイメージ作成を試みました。
# cat Dockerfile
FROM python:3.8
WORKDIR /app
COPY requirements.txt .
# コンテナ内で必要なパッケージをインストール
RUN pip install --trusted-host pypi.python.org -r requirements.txt
COPY main.py .
EXPOSE 8000
# FastAPIを8000ポートで待機
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]
上記Dockerfileの詳細に関しては、以下をご覧ください。
docker buildコマンド実行後、NewConnectionErrorのエラーが発生し、Dockerのコンテナイメージ作成に失敗しました。
# ls
Dockerfile
# docker build .
Sending build context to Docker daemon 4.019MB
Step 1/7 : FROM python:3.8
---> e7d3be492e61
Step 2/7 : WORKDIR /app
---> Using cache
---> a96c66083b2c
Step 3/7 : COPY requirements.txt .
---> Using cache
---> 45cfce7f2639
Step 4/7 : RUN pip install fastapi
---> Running in ff0f3f0dcf1b
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f4596e340d0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/fastapi/
docker build実行時に「NewConnectionError」が発生した原因は以下です。
★docker build実行時にNewConnectionErrorが発生し失敗する原因★
NewConnectionErrorが発生する原因として、「Dockerのコンテナイメージ内から外部のネットワークへ通信ができない」があります。
以上が、「docker build実行時にNewConnectionErrorのエラーが発生する原因」となります。
docker build実行時に「NewConnectionError」のエラーが発生し失敗した場合、ネットワーク周りの設定を見直しましょう。
docker build時のエラー(NewConnectionError)に対する対処手順
「docker build時のエラー(NewConnectionError)に対する対処手順」に関してご紹介します。
★docker build時のエラー(NewConnectionError)に対する対処手順★
・docker build実行時に利用するネットワークを指定
・Dockerのコンテナイメージ内に存在する/etc/resolv.confを修正
docker build実行時に「NewConnectionError」のエラーが発生し失敗した場合、上記の対処をすることで、エラーを解消できます。
上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年6月17日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)
以降で、上記「docker build時のエラー(NewConnectionError)に対する対処手順」の各手順に関してご説明します。
docker build実行時に利用するネットワークを指定
「docker build実行時に利用するネットワークを指定」に関してご説明します。
docker build実行時に利用するネットワークを指定することで、「NewConnectionErrorのエラーによる失敗」を解消できます。
以下のようにdocker buildコマンドを実行してください。
# docker build --network=host .
docker buildコマンド実行時に「–network=host」と指定することで、ホスト(パソコン)側のネットワークを利用しコンテナイメージを作成します。
参考:docker buildコマンドの公式リファレンス
上記で「NewConnectionErrorのエラーによるdocker buildコマンドの失敗」が解消しない場合、次節の対処手順を試してください。
以上で、「docker build実行時に利用するネットワークを指定」は完了です。
Dockerのコンテナイメージ内に存在する/etc/resolv.confを修正
「Dockerのコンテナイメージ内に存在する/etc/resolv.confを修正」に関してご説明します。
/etc/resolv.confには、DNSを使用してホスト名とIPアドレスを解決する方法が定義されます。
Dockerfileにおいて、「外部ネットワークと通信するコマンド」が実行される前に、下記コマンド( echo “nameserver 8.8.8.8” > /etc/resolv.conf )を実行しましょう。
# cat Dockerfile
FROM python:3.8
WORKDIR /app
COPY requirements.txt .
# コンテナ内で必要なパッケージをインストール
RUN echo "nameserver 8.8.8.8" > /etc/resolv.conf && pip install --trusted-host pypi.python.org -r requirements.txt
COPY main.py .
EXPOSE 8000
# FastAPIを8000ポートで待機
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]
筆者の場合、上記対処で「NewConnectionErrorのエラーによるdocker buildコマンドの失敗」を解消できました。
以上で、「Dockerのコンテナイメージ内に存在する/etc/resolv.confを修正」は完了です。
上記の対処で、docker build時のエラー(NewConnectionError)を解消できます。
【まとめ】docker buildでNewConnectionErrorのエラーで失敗
今回の記事を通して、「docker buildでNewConnectionErrorのエラーで失敗」をご紹介することで、以下の悩みを解消しました。
★悩み★
・docker build実行時にNewConnectionErrorのエラーで失敗する。
・docker build実行時にNewConnectionErrorが発生する原因を知りたい。
・NewConnectionErrorが発生しないようにする手順を知りたい。
「docker build実行時にNewConnectionErrorのエラーで失敗したけどどう解消すればいいのか?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。
コメント