1. ホーム
  2. ドッカー

Dockerコンテナ共通のトラブルシューティングと対処法

2022-02-28 17:41:22
<パス

Dockerコンテナ共通のトラブルシューティングと対処法

<ブロッククオート

この記事は、社内フォーラムの投稿から引用しています。

<ブロッククオート

Dockerは比較的簡単に使えるコンテナで、いくつかの方法で情報を取得することができます。



1. docker run でコマンドを実行し、おそらく情報を返します。



2、docker logsでログを取得し、対象のフィルタリングを行う



3, systemctl status docker で docker サービスの状態を確認します。



4. journalctl -u docker.serviceでログを表示する。

以下は、ドッカーコンテナクラスの問題の失敗を9つのカテゴリーに分類してまとめたものです。

<ブロッククオート
I. スタートアップクラスの失敗

1. docker: unix:///var/run/docker.sock にある Docker デーモンに接続できません。ドッカーデーモンは起動していますか?

原因は?Dockerが正常に起動しない



解決方法



systemctl start docker

2. unix ソケットを作成できない /var/run/docker.sock: はディレクトリです。

理由:docker.sock が作成できないため



解決方法



rm -rf /var/run/docker.sock



その後、dockerを再起動します。

3. docker.service のジョブに失敗しました。Docker アプリケーションの起動に失敗しました。

原因:Selinuxに起因するもの



解決方法



/etc/sysconfig/selinux , selinuxの値をdisabledに変更します。



解決するためにdockerを再起動する

4. docker: デーモンからエラー応答がありました。

/var/lib/docker/overlay/XXXXXXXXXXXXXXX: そのようなファイルまたはディレクトリはありません。



理由:dockerがディレクトリまたはファイルを指定していないため



解決方法



systemctl stop docker



rm -rf /var/lib/docker/* を実行します。



systemctl start docker



実行イメージを再起動し、コンテナを起動します

5. docker: デーモンからエラー応答がありました。コンフリクトです。コンテナ名 "XXX" は、コンテナ "XXX " によって既に使用されています。この名前を再利用するには、そのコンテナを削除(または名前変更)する必要があります。

理由: ドッカー名のリネーム



解決策



コンテナの名前を変更するか、削除して再構築する

6. エラーです。接続の有効化に失敗しました。この接続に適したデバイスが見つかりません

原因 NICの設定に問題がある



解決方法



NICを再起動する

7. システムの再起動後、docker が起動できない。

エラーは、docker0: iptables: その名前のチェーン/ターゲット/マッチがない



理由:docker service iptablesの問題です。



解決方法



dockerサービスの再起動 system restart docker

8. デーモン起動エラー:グラフドライバの初期化エラー:ドライバがサポートされていない

Overlay2 ストレージドライバを使用した docker デーモンの起動エラー



理由: デーモンの設定が不足しています



解決策



設定を追加します。



/etc/docker/daemon.json



{"storage-driver": "overlay2",



"storage-opts": ["overlay2.override_kernel_check=true"]}.

9. docker.service の起動に失敗しました。ユニットdocker.serviceはマスクされています。

不明な理由: docker がマスクされた



解決方法



systemctl unmask docker.service



systemctl unmask docker.socket



systemctl start docker.service

10. docker.service の起動に失敗しました。ユニットが正しくロードされていません。無効な引数です。

不明な理由: docker サービスが正しくロードされていません。



回避策



dockerをアンインストールし、docker.serviceを削除する。



dockerを再インストールします。

11. docker-compose がコンテナを起動しますが、エラーが発生します。

/usr/lib/python2.7/site-packages/requests/init.py:80: RequestsDependencyWarning: urllib3 (1.22) または chardet (2.2.1) は RequestsDependencyWarning していません)。

原因不明です。対応するpipのコンポーネントバージョンがサポートされていない



解決方法



pip uninstall urllib3



pip uninstall chardet



pip install requests

12. ドッカーコンテナの再起動に失敗

dockerプロセスを強制終了した後にdockerを再起動すると、dockerのコンテナが起動に失敗し、エラーが報告される



docker restart XXXXXXX デーモンからのエラー応答です。Cannot restart container XXXXXXX: container "XXXXXXXXXXXXX": already exists

原因 古いコンテナが安全に終了していない



解決方法



docker-containerd-ctr --address /run/docker/containerd/docker-containerd.sock --namespace c rm <container hash_id>.Docker-containerd-ctr --address /run/docker/containerd.sock --namespace c rm <container hash_id&g;

docker start コンテナ

13, docker restart error - restart command keeps getting stuck.

systemctl restart docker stuck



原因不明:起動したコンテナが多すぎるか、ディスクIOに問題がある可能性があります。



解決方法



systemctl start docker-cleanup.service



systemctl start docker

<ブロッククオート
II. パーミッションの問題に対するエラー報告

14. unix:///var/run/docker.sock にある Docker デーモンソケットに接続しようとしたときに、パーミッションが拒否されました。

回避策

/var/run/docker.sock が置かれているユーザーグループを確認します。

ユーザーを docker グループに戻すには、usermod -aG docker ${USER} とします。

ステップ GROUP で chown socket: そのようなプロセスはありません。

原因:dockerがGroup情報を見つけられませんでした。dockerのグループが誤って削除された可能性があります。

解決方法

groupadd docker

16. 投稿 http:///var/run/docker.sock/v1.XXX /auth: dial unix /var/run/docker.sock: パーミッションが拒否されました。TLSが有効なデーモンにTLSなしで接続しようとしていませんか?

原因 非RootユーザのDocker管理時のパーミッション不足

解決方法

groupadd docker

usermod -a -G docker ユーザー

17. ドッカーのコミットイメージにエラーが発生

tarファイルの処理エラー(終了ステータス1):予期しないEOF

原因 おそらくパーミッションの問題が原因

解決方法

chmod +x 実行権限を追加する

III. ミラーとリポジトリの問題報告エラー

18. https://registry-1.docker.io/v2/: ダイヤル tcp: ルックアップ registry-1.docker.io

理由 Docker リポジトリにアクセスできない

回避策

Dockerのリポジトリソースを国産または自作リポジトリソースに変更する

etc/docker/daemon.json を変更します。

19、ローカル画像エラー報告をプッシュする

The push refers to repository [XXXX] Get https://xxx/v1/_ping: http: server gave HTTP response to HTTPS client

原因:ドッカーレジストリがhttpsのサービスを使用していない

回避策

/etc/docker/daemon.jsonファイルに書き込まれます。

{ "insecure-registries":[""] }.

20. /usr/bin/docker-current: デーモンからのエラー応答: oci runtime error: container_linux.go: starting container process caused " exec: "/bin/bash": executable file not found in $PATH".

原因 Dockerイメージそのもの、またはDockerエンジンのバージョンが低いこと

解決方法

Dockerのバージョンサービスをアップグレードすることができます

21、イメージをビルドし、chown -Rを実行するのが非常に遅い

理由 Dockerはコピーオンライトポリシーを採用しているため、chownコマンドを実行すると、上位のイメージファイルをすべて現在のレベルにコピーし、パーミッションを変更して再びファイルシステムに書き込む。

回避策

chown -R などのコマンドを使用して、ファイルに大きな変更を加えるべきではありません。

22. docker build でイメージをビルドすると、以下のエラーが発生します。

syslogd からのメッセージ kernel:unregister_netdevice: waiting for lo to become free.usage count = 1

原因:ドッカーエンジンのバージョンが高すぎる

解決方法

dockerエンジンのバージョンは、docker内部イメージのカーネルバージョンと一致させる必要があります

23, docker: Error response from daemon: containerd: container did not start before specified time-out.ERRO[0133] error getting events from daemon : context cancelled.ERRO[0133] error getting events from daemon

理由 docker のルートディレクトリを変更して再起動した後、イメージをダウンロードするとエラーが報告されました。

解決方法

dockerサービスを再起動する

またはサーバーを再起動する

<ブロッククオート
IV. リソースの問題に対するエラー報告

25. Docker デバイスに空き容量がない

理由: 容量不足

解決方法 未使用のコンテナ、ミラー、その他のリソースを削除し、スペースをクリーンアップします。

ドッカーシステムプルーン -a

26. 26. /var/lib/docker/containers is over-occupied(コンテナ過多)

理由 ログファイルが大きすぎる

解決策

cat /dev/null > *-json.log

または

dockerdの起動パラメータ、/etc/docker/daemon.jsonを追加します。

{"log-driver": "json-file",

"log-opts": {"max-size": "2G", "max-file": "10"}.

27. 最大仮想メモリ領域 vm.max_map_count [65530] が低すぎるため、最低でも [262144] まで増やしてください。

原因:システムパラメータのデフォルト構成が小さすぎるため

解決方法

etc/sysctl.conf の vm.max_map_count が増加するように修正する。

28, コンテナプロセスを開始すると、 "process_linux.go:301 が発生しました。



initのためにexec setnsプロセスを実行すると、 "終了ステータス40"":不明が発生しました。



時折

原因は?キャッシュの問題によるものと思われます

解決方法

echo 1 > /proc/sys/vm/drop_caches

29、dockerがローカルで複数のコンテナを起動し、その後のコンテナ起動に失敗する。

原因 ハードディスクの空き容量が満杯であるかどうかを確認し、ハードディスクの空き容量に問題がない場合

解決方法

vim /etc/sysctl.conf

fs.aio-max-nr = 1048576 というパラメータを追加。

sysctl -p

30. Docker が異常に起動し、ステータスが再起動を繰り返す

Dockerログにコンテナ名、例外ログを表示する

var/log/messages を表示する

原因:メモリが一杯になり、OOMが発生した

解決方法

メモリ解放後、再度コンテナを起動する

V. バージョン非互換性エラー報告

31. overlayfs: ext4 でもベースレイヤーから新規作成されたディレクトリに移動したファイルを削除できません。

原因 Centos が提供するファイルシステム XFS と Overlay の互換性に問題があります。

回避策

この問題はカーネル 4.4.6 以降に修正されています。

32. docker: デーモンからのエラー応答。OCI runtime create failed: container_linux.go:344: starting container process caused "process _linux.go:297: getting the final child's pid from pipe caused "read init-p: connection reset by peer" ": unknown.OCI runtime create failed: コンテナプロセスを開始します。

原因 DockerのバージョンとOSのバージョンが一致しない

解決方法

dockerの再インストールとOSカーネル対応版

<ブロッククオート
VI. ネットワークまたはポートの問題によるエラー報告

33. 警告: IPv4 転送が無効です。

原因:ipv4ネットワークが転送できません。

回避策

/usr/lib/sysctl.d/00-system.conf

最終行にnet.ipv4.ip_forward=1を追加します。

ネットワークサービスを再起動します。間違ったコンテナを削除し、再度新しいコンテナを作成します。

34. デフォルトのドライバでネットワーク "xxxxxxxxxx"を作成する

原因:Docker Gatewayの競合

コンテナ起動後の切断問題、docker-composeはコンテナを起動します。

解決方法

docker-compose.yml にパラメータ network_mode: "bridge" を設定し、起動したコンテナに対して設定します。

35. 次の条件を満たすノードが見つかりません [ポート xxxx] 。

原因 コンテナがポートマッピングを使用している場合(docker run -p xxxx:xxxx または

ホスト上のポートがコンテナやシステムプロセスによって占有されている場合、ポートの割り当てに失敗します。

解決方法

ポートを占有しているコンテナまたはプロセスを削除するか、コンテナのポートとホストポートのマッピングを調整して、競合を回避します。

36. デーモンからのエラー応答:名前xxxのサービスエンドポイントは既にある

理由:ポートがすでに占有されているため

解決策

dockerコンテナを再起動する

docker: Error response from daemon: driver failed programming external connectivity on endpoint XXXXX: Bind for 0.0.0.0:80 failed: port is already allocated.

原因:コンテナポートの競合

解決方法

ホストバインドポートを変更する

VII. Dockerインストールエラーの報告

38. docker レポートのインストール Requires: container-selinux >= 2.9

理由:container-selinuxのバージョンが低いか、インストールされていないため。

解決方法

wget -O /etc/yum.repos.d/CentOS-Base.repo

http://mirrors.aliyun.com/repo/Centos-7.repo

yum install epel-release

yum makecache

yum install container-selinux

39. docker-compose のインストールでエラーが発生

"ImportError: 'module' object has no attribute 'check_specifier' "。

理由: setuptoolsのバージョンの問題

解決方法

setuptoolsをバージョン30.1.0以降にアップグレードする。

pip install --upgrade setuptools

40. docker-composeのインストールでエラーが発生

DEPRECATION: Python 2.7は2020年1月1日に耐用年数が終了します。Python 2.7は2020年1月1日に寿命を迎えるため、Pythonのアップグレードをお願いします。将来のバージョンのpipはPython 2.7をサポートしなくなります。

理由:python 2.7がアップグレードを要求するため

解決方法

pip install -i https://pypi.douban.com/simple docker-compose

VIII. Dockerの削除エラー報告

41. ドッカー削除コンテナエラー

デーモンからのエラー応答:Driver overlay failed to remove root filesystem xxxxx: remove/var/lib/docker/overlay2/xxxxx/merged: device or resource busy。

理由:コンテナにマウントされたデータボリュームを直接削除できないため

解決方法

grep docker /proc/*/mountinfo | grep xxxxx

プロセス終了後

そして、コンテナを再削除する

42. ステータスが dead のコンテナを削除すると、エラーが報告される

デーモンからのエラー応答です。Driver aufs failed to remove root filesystem XXXXXXXXXXXXXXXX: aufs: unmount error after retries: /var/lib/docker/aufs/ mnt/xxxxxxxx: デバイスまたはリソースがビジー状態です。

理由:デッドステートのコンテナは削除できず、リソースを占有したままである。

解決策

docker rm -fv コンテナIDは数分後に自動的に削除されます

43. docker の画像削除エラー

デーモンからのエラー応答: 衝突: リポジトリの参照を削除できません "XXXX" (強制する必要があります) - コンテナ XXXX はその参照イメージ YYYY を使用しています。

理由: イメージがコンテナによって使用されています。

解決方法

ミラーを削除する前に、関連する ID コンテナを削除する必要があります。

44. ドッカーイメージ削除エラー

デーモンからのエラー応答:競合:XXXXXXXXXXを削除できない(強制する必要がある) - イメージは複数のリポジトリで参照されています。

原因:画像のログインにより、リモート側の他のリポジトリが押された。

回避策

このイメージが不要な場合、docker rmi -f force delete

45.ドッカーイメージ削除エラー

デーモンからのエラー応答:競合:XXXを削除できない(強制できない) - イメージには依存する子イメージがあります。

原因 親画像に依存する子画像が存在する

解決方法

ミラーを強制削除するか、コンテナを一括削除してからミラーを削除する

IX. その他のエラー報告

46. docker: Error response from daemon: driver failed programming external connectivity on end-point XXXXXXX: (iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.2 --dport 8080 -j ACCEPT: iptables: その名前のチェーン/ターゲット/マッチはありません。

原因:ファイアウォールの問題によるもの

解決方法

ファイアウォールをオフにして、dockerを再起動する

47. docker info を実行すると、次のような警告が表示されます。



警告: bridge-nf-call-iptables は無効です。



警告:bridge-nf-call-ip6tables は無効です。

原因:設定の問題により発生、bridge-nf-call-iptablesを有効にする必要があります。

回避策

vi /etc/sysctl.conf

以下を追加します。

net.bridge.bridge-nf-call-ip6tables = 1 です。

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-arptables = 1

48. ドッカーデータベース関連のエラー報告

Dockerのフリッカーでmysqlコンテナを作成する

データベースが初期化されていない、パスワードオプションが指定されていない

解決方法

docker run -d -e MYSQL_ROOT_PASSWORD=[password] -p 3306:3306 mysql image

Dockerの使用仕様の提案

  • 過去1~2年の新しい安定版Dockerを使用するようにする。

  • 今年以前の非常に古いバージョンをインストールしないでください。

  • 5G10G+のような非常に大きなミラーは作成しないようにしてください。

  • 不要なソフトウェアやデータなどを削除し、できるだけ軽い画像にする。

  • コンテナ内にホスト構成をマウントし、読み取り専用で使用します。

  • コンテナは、可能であれば ro read-only を使用して、ホスト構成ファイルを -v する必要があります。

  • ホストの物理ドライブまたはストレージノードにマウントするデータ

  • コンテナのダウンタイムによるデータ損失を避けるため、コンテナ内で直接実行しないこと

  • アプリケーションログはホストにフックする必要があります。

  • コンテナに直接プリントしない、ドッカーログを避ける、ログを見るためにvulumeディレクトリに移動することを避ける

  • 最新のタグを使うだけではダメ

  • タグは、タグ別に対応するバージョンを見つけるための管理基準を持つべきである

  • コンテナipを使用せず、コンフィギュレーションにdeadを書かない(デフォルト172.17.0.x)

  • コンテナ再起動後、ipが変更される可能性が高い

  • 1つのコンテナで複数のプロセスを実行しないようにする

  • コンテナは仮想マシンではないので、1コンテナ1プロセスを心がけましょう

  • 環境イメージ間の一貫性

  • テスト環境、UAT環境、本番環境にかかわらず、同じイメージを維持し、変更せず、環境変数のパラメータのみを変更して違いを出すようにする

  • 問題が見つかっても、常にdockerコンテナを監視すること

  • コンテナの監視にはprometheusを使用することが推奨されます

  • ホストのハードウェアリソースを侵害しないように、ドッカーコンテナのリソース、特にCPU、メモリ、ハードディスクスペース、さらにはネットワークを必ず制限してください。