ホームページ  >  記事  >  運用・保守  >  docker起動時のエラーの解決方法

docker起動時のエラーの解決方法

藏色散人
藏色散人オリジナル
2021-12-30 11:14:0315801ブラウズ

docker 起動時のエラーの解決策: 1. docker を開き、コンテンツ "OPTIONS="--selinux-enabled..."" を追加します; 2. iptables のフィルター テーブルをクリアします; 3. " を実行します。 docker -storage-setup」コマンドなど。

docker起動時のエラーの解決方法

この記事の動作環境: CentOS 7.2 システム、Docker バージョン 18.04.0、Dell G3 コンピューター。

docker 起動時のエラーを解決するにはどうすればよいですか?

Docker 起動時のエラー レポートの概要

Docker の 8 つの一般的な障害

エラー レポート 1: グラフドライバーの初期化エラー

Docker の起動エラー レポート

システムは CentOS 7.2
システム カーネルと Docker のバージョンは次のとおりです:

[root@docker ~]# uname -r
3.10.0-327.el7.x86_64
[root@docker ~]# 
[root@docker ~]# 
[root@docker ~]# 
[root@docker ~]# docker version
Client:
 Version:   18.04.0-ce
 API version:   1.37
 Go version:    go1.9.4
 Git commit:    3d479c0
 Built: Tue Apr 10 18:21:36 2018
 OS/Arch:   linux/amd64
 Experimental:  false
 Orchestrator:  swarm

Server:
 Engine:
  Version:  18.04.0-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.4
  Git commit:   3d479c0
  Built:    Tue Apr 10 18:25:25 2018
  OS/Arch:  linux/amd64
  Experimental: false

起動エラー メッセージは次のとおりです:

[root@docker ~]# systemctl start docker
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journ
[root@docker ~]# 
[root@docker ~]# 
[root@docker ~]# 
[root@docker ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since 日 2018-04-22 20:52:39 CST; 5s ago
     Docs: https://docs.docker.com
  Process: 4810 ExecStart=/usr/bin/dockerd (code=exited, status=1/FAILURE)
 Main PID: 4810 (code=exited, status=1/FAILURE)

4月 22 20:52:39 docker.cgy.com systemd[1]: Failed to start Docker Application Container Engine.
4月 22 20:52:39 docker.cgy.com systemd[1]: Unit docker.service entered failed state.
4月 22 20:52:39 docker.cgy.com systemd[1]: docker.service failed.
4月 22 20:52:39 docker.cgy.com systemd[1]: docker.service holdoff time over, scheduling restart.
4月 22 20:52:39 docker.cgy.com systemd[1]: start request repeated too quickly for docker.service
4月 22 20:52:39 docker.cgy.com systemd[1]: Failed to start Docker Application Container Engine.
4月 22 20:52:39 docker.cgy.com systemd[1]: Unit docker.service entered failed state.
4月 22 20:52:39 docker.cgy.com systemd[1]: docker.service failed.

上記のエラーメッセージからはエラーの原因がわかりません。次に、dockerd を使用して直接起動すると、出力情報の下部に次のようなエラー メッセージが表示されました。

[root@docker ~]# dockerd
INFO[2018-04-22T21:12:46.111704443+08:00] libcontainerd: started new docker-containerd process  pid=5903
INFO[0000] starting containerd                           module=containerd revision=773c489c9c1b21a6d78b5c538cd395416ec50f88 version=v1.0.3

。。。。。。省略一部分输出。。。。。。

INFO[0000] loading plugin "io.containerd.grpc.v1.introspection"...  module=containerd type=io.containerd.grpc.v1
INFO[0000] serving...                                    address="/var/run/docker/containerd/docker-containerd-debug.sock" module="containerd/debug"
INFO[0000] serving...                                    address="/var/run/docker/containerd/docker-containerd.sock" module="containerd/grpc"
INFO[0000] containerd successfully booted in 0.002763s   module=containerd
Error starting daemon: error initializing graphdriver: overlay: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior. Reformat the filesystem with ftype=1 to en d_type support. Backing filesystems without d_type support are not supported.

最後のエラーによると デーモン起動エラー: このブログを検索して解決策を見つけました。
https://blog.csdn.net/liu9718214/article/details/79134900

具体的な解決策は次のとおりです:

vim /etc/sysconfig/docker 次のコンテンツを追加します:

OPTIONS="--selinux-enabled --log-driver=journald --signature-verification=false"

/etc/docker/daemon.json次のコンテンツを追加します:

{
    "registry-mirrors": ["http://4a1df5ef.m.daocloud.io"],   # 是用来pull容器加速用的,跟此次问题无关。
    "storage-driver": "devicemapper"    # 解决此次问题
}
その後、docker を再起動して問題を解決しますSimply:

[root@docker ~]# systemctl restart docker
[root@docker ~]# 
[root@docker ~]# 
[root@docker ~]# ps aux | grep docker
root       5922  1.7  1.6 528432 62568 ?        Ssl  21:15   0:00 /usr/bin/dockerd
root       5927  1.1  0.5 356984 22100 ?        Ssl  21:15   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
root       6028  0.0  0.0 112664   964 pts/0    S+   21:15   0:00 grep --color=auto docker
Error 2: iptables failed

FirewallD

firewalld は CentOS-7 で導入され、ファイアウォールの最下層はデータ フィルタリングに iptables を使用するように構築されています。これにより、Docker との競合が発生する可能性があります。

firewalld が起動または再起動すると、DOCKER ルールが iptables から削除されるため、Docker の通常の動作に影響します。

Systemd を使用している場合、Docker よりも前に firewalld が起動しますが、Docker の起動後に firewalld を起動または再起動する場合は、Docker プロセスを再起動する必要があります。

システム:

[root@controller ~]# cat /etc/redhat-release 
CentOS Linux release 7.0.1406 (Core)

エラー メッセージは次のとおりです:

[root@controller ~]# docker run -it -P docker.io/nginx
/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint gloomy_kirch (10289e7a87e65771da90cda531951b7339bee9cb5953474460451cd48013aff0): iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 32810 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1).

これは、コンテナが今回の実行前に一度正常に起動されたためです。ファイアウォールの問題により、Nginx への通常のアクセスが妨げられたため、iptables のフィルター テーブルをクリアし、iptables を再起動してから再度実行すると、上記のエラーが報告されました。

解決策

ファイアウォールを再起動します

#CentOS 7下执行
[root@controller ~]# systemctl restart firewalld
Dockerデーモンプロセスを再起動します

[root@controller ~]# systemctl restart docker
コンテナ内でnginxを再度実行すると、エラーは発生しません

[root@controller ~]# docker run -it --name nginx -p 80:80 -v /www:/wwwroot docker.io/nginx /bin/bash
root@a8a92c8f7760:/#

エラー 3: シン プールの所有権を取得できません

Docker デーモンの起動に失敗しました: シン プールの所有権を取得できません

Apr 27 13:51:59 master systemd: Started Docker Storage Setup.
Apr 27 13:51:59 master systemd: Starting Docker Application Container Engine...
Apr 27 13:51:59 master dockerd-current: time="2018-04-27T13:51:59.088441356+08:00" level=warning msg="could not change group /var/run/docker.sock to docker: group docker not found"
Apr 27 13:51:59 master dockerd-current: time="2018-04-27T13:51:59.091166189+08:00" level=info msg="libcontainerd: new containerd process, pid: 20930"
Apr 27 13:52:00 master dockerd-current: Error starting daemon: error initializing graphdriver: devmapper: Unable to take ownership of thin-pool (docker--vg-docker--pool) that already has used data blocks
Apr 27 13:52:00 master systemd: docker.service: main process exited, code=exited, status=1/FAILURE
Apr 27 13:52:00 master systemd: Failed to start Docker Application Container Engine.
Apr 27 13:52:00 master systemd: Unit docker.service entered failed state.
Apr 27 13:52:00 master systemd: docker.service failed
理由: /var/lib/ docker/devicemapper/metadata/ のメタデータが失われます

回避策:

https://bugzilla.redhat.com/show_bug.cgi?id=1321640#c5

Ericパリ 2016-04-27 08:20:10 EDT

I feel like the kcs kinda misses telling users the actual problem. Nor does it really make it clear the solution.

IF you are using device mapper (instead of loopback) /var/lib/docker contains metadata informing docker about the contents of the device mapper storage area. If you delete /var/lib/docker that metadata is lost. Docker is then able to detect that the thin pool has data but docker is unable to make use of that information. The only solution is to delete the thin pool and recreate it so that both the thin pool and the metadata in /var/lib/docker will be empty.
解決策:

  • コマンドを実行:

    rm -rf /var/lib/docker/*

  • コマンドを実行します:

    rm -rf /etc/sysconfig/docker-storage

  • コマンドを実行します。コマンド:

    lvremove /dev/docker-vg/docker-pool

  • 既存の docker-vg LVM ボリューム グループを使用:

cat <<EOF > /etc/sysconfig/docker-storage-setup
VG=docker-vg
EOF
  • コマンドを実行します:

    docker-storage-setup

  • #docker を再起動します:

    systemctl start docker

エラー 4: write /sys/fs/cgroup/cpuset/docker/cpuset.cpus: 無効な引数

docker run でコンテナーを実行すると、次のエラーが報告されます:

[root@backup-system cpu]# docker run -ti --name hkp_ubuntu  --cpuset-cpus=0-3 ubuntu bash
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: process_linux.go:326: applying cgroup configuration for process caused: failed to write "0-3\n" to "/sys/fs/cgroup/cpuset/docker/cpuset.cpus": write /sys/fs/cgroup/cpuset/docker/cpuset.cpus: invalid argument: unknown.
このエラーは、この cgroup の CPU が他の cgroup によって使用されているため、排他を設定できません。

したがって、まず各 cgroup の cpuset.cpus をチェックして調整し、現在の cgroup で使用されている CPU が実際にその cgroup にのみ割り当てられていることを確認し、この時点で cpu_exclusive を設定する必要があります。

現在の具体的な理由は、実験中に新しいコンテナ ディレクトリが

/sys/fs/cgroup/cpuset/ に作成され、container/cpuset.cpus が設定されたためです。 0-3

[root@backup-system docker]# cat /sys/fs/cgroup/cpuset/container/cpuset.cpus 
0-3

Solution:
/sys/fs/cgroup/cpuset/container/cpuset.cpus を空に設定すると、上記の問題が発生します解決されます。

推奨される学習: 「

docker ビデオ チュートリアル

以上がdocker起動時のエラーの解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。