n1.Dockerのインストールと操作の例外が発生しました

[ TOC]

0 x00Dockerディレクトリとパス####

CentOS7:デフォルトのDockerインストールディレクトリと構成ファイル

# Systemctl起動項目パラメーター
/etc/systemd/system/docker.service
/usr/lib/systemd/system/docker.service

# Dockerメタデータディレクトリ
/var/lib/docker

# DockerDeamonスタートアップアイテム
/etc/sysconfig/docker

# Docker daemon.jsonパラメータ
/etc/docker/daemon.json
/root/.docker/config.json

**Ubuntu:スナップによってインストールされたDocker **

# グローバル構成
/var/snap/docker
/var/snap/docker/current/  #Docker起動構成
config/ etc/  run/

# ユーザー設定
/root/snap/docker

0 x01基本構成####

1. Dockerのデフォルトの保存場所を変更するにはどうすればよいですか?#####

説明:デフォルトでは、Dockerの保存場所は / var / lib / dockerであり、特定の場所はsudo docker info | grep "Docker RootDir"で確認できます。

方法1:ソフト接続を介して実現Dockerを起動すると、ストレージディレクトリはまだ / var / lib / dockerであることがわかりますが、実際にはデータディスクに保存されています(容量の変更)。

systemctl stop docker
# 方法1.ソフト接続
mv /var/lib/docker /disk/docker
ln -s /disk/docker /var/lib/docker  #ターゲットソフトリンク

# 方法2.dockerディレクトリをパッケージ化します
sudo tar -czvf /usr/docker.tar.gz docker/
cd /disk/&& sudo tar -xzvf docker.tar.gz

方法2:イメージとコンテナーのストレージパスを変更します。つまり、構成ファイルを変更して起動パラメーターを指定する必要があります。イメージとコンテナーのストレージパスを指定するパラメーターは、docker.serviceにあるため、 --graph = / var / lib / dockerです。以下を環境変数にロードすると、最後の図が明確になります(次のいくつかの方法は1つの種類と見なすことができます)

#(1) 注意:リリースバージョンの類似点と相違点,変更後に再起動
Ubuntu:/etc/default/docker
OPTIONS='--graph="/disk/docker" -H fd://'  #またはDOCKER_OPTS="-g /disk/docker"

CentOS6:/etc/sysconfig/docker
OPTIONS='--graph="/disk/docker" --selinux-enabled -H fd://'

#(2) 構成ファイルの場所(この方法はお勧めしません)
# /usr/lib/docker-storage-setup/docker-storage-セットアップまたは/etc/sysconfig/docker-storage-setup、/etc/sysconfig/docker-storage
DOCKER_STORAGE_OPTIONS=--graph="保存するパス"
# 最大ストレージ容量100GBなどの制限的なデフォルト値。
DATA_SIZE=800GB #dockerのデフォルトのストレージサイズを変更する

# 実際、以下のファイルの読み込みに依存して、ExecStart起動時にハングするドッカーの保存場所を直接指定できるため、変更方法と見なされます);
CentOS7:/usr/lib/systemd/system/docker.service  
EnviromentFile=-/etc/sysconfig/docker
Environment=GRAPH=/disk/docker
ExecStart=/usr/bin/dockerd --graph=/disk/docker $GRAPH $OPTIONS 
systemctl daemon-reload           #構成ファイルをリロードする
systemctl restart docker.service  #dockerを再起動します

WeiyiGeek.docker

方法4:dockerがバージョン1.12以降の場合、 / etc / docker / daemon.jsonファイルを変更(または新しい作成)できます。
この方法の利点は、dockerサービスを再起動しなくても、変更後すぐに有効になります。

vim /etc/docker/daemon.json 
{" registry-mirrors":["http://7e61f7f9.m.daocloud.io"],"graph":"/disk/docker"}
2. コンテナログファイルを分割する方法は?#####

説明:ドッカーイメージが長時間多くのディスクスペースを占有することに加えて、コンテナーの実行中に大量のログを書き込むことも頭痛の種であり、監視警告なしでいつでもビジネスがダウンします(少なくとも私は1に遭遇しました)タイムズ)。

デフォルト(JSONファイルロギングドライブ)では、Dockerはすべてのコンテナの標準出力(および標準エラー)をキャプチャし、JSON形式でファイルに書き込みます。アプリケーションの標準出力(stdout)ログの場合、DockerDaemonはこのコンテナを実行しています。その時点で、標準の出力ログを担当するゴルーチンが作成されます。
このゴルーチンは「コンテナ全体のすべてのプロセスの標準出力ファイル記述子」にバインドされているため、コンテナに適用されたすべての標準出力ログはゴルーチンによって受信され、このコンテナに対応するログファイルに書き込まれます。つまり、ログファイルが配置されます。 / var / lib / docker / containers /<container_id> /ファイル名は-json.logです

Dockerは、docker logsコマンドを介してユーザーにログインターフェイスを提供します。その実装原則の本質は、コンテナ-json.logとの1対1の対応に基づいています( kubectlログは類似しています)。

WeiyiGeek.goroutine

過剰なログファイルに対するいくつかの解決策:

# ドッカーストレージ-ドライバがoverlay2の場合、単一のコンテナが占有できるディスクスペースを制限します
- 1. xfs、LinuxファイルシステムCentOS 7、デフォルトのファイルシステムが元のEXT4からXFSファイルシステムに変更されました
- 2. pquot(project quotas )SystemXFSは、ユーザー、グループ、およびプロジェクトによるディスククォータの設定をサポートしています。プロジェクトディスククォータを使用すると、単一のディレクトリ階層のディスク領域の量を制限できます。
# マウント時にファイルシステムタイプを指定し、使用する-o enbale project quotas
mount –o prjquota /dev/xvdb1 /xfs
# 限定プロジェクト=テスト/データディレクトリのソフト制限=5M hard limit=6M
xfs_quota –x –c 'limit –p bsoft=5m bhard=6m test'/data
(1) Images space usage:
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE                SHARED SIZE         UNIQUE SIZE         CONTAINERS
onlyoffice/documentserver   latest              d06214a03e27        2 months ago        2.145GB             0B                  2.145GB             1(2)Containers space usage:
CONTAINER ID        IMAGE                       COMMAND                  LOCAL VOLUMES       SIZE                CREATED             STATUS                NAMES
d415211e52da        onlyoffice/documentserver   "/bin/sh -c /app/ds/…"6                   986MB               4 weeks ago         Up 3 days             onlyoffice(4)Local Volumes space usage:
VOLUME NAME                                                        LINKS               SIZE
a4974599165f539b98fd57fc53ccc073a7e8cdf4cd36cbc5e349fb8d4f6a1325   02.51MB(5)Build cache usage: 0B
CACHE ID            CACHE TYPE          SIZE                CREATED             LAST USED           USAGE               SHARED

実用的な解決策:

# 例1.空の停止したコンテナとログを含むボリューム/コンテナ/インターネット/鏡(スペースを解放するには-尽量在缺订需要的コンテナ)
docker system prune -af
# Deleted Containers:
# 9 c8a4f60ad62cee63c7d5b48041e29363ee4f839aedb2cec9a76df3e6ccda2e8
# 2 d5cca572c06e11a6a2005cd46d154b71bad151610ce074424a32850aedb2b39
# 8 c78c868d29285afeb00eb617d0a8e3280b6da2f69bf8dd42e04a8e334d3ae22

# Deleted Networks:
# blog_default

# Deleted Images:
# untagged: snipe/snipe-it:latest
# untagged: snipe/[email protected]:7a61e8a407490b9e99c758a18ba814c10fe55f1465e036bfd1ee5445537c7661
# Total reclaimed space:1.096GB

# 例2./etc/docker/daemon.json [restartdaemon]によって作成されたコンテナでのこのオプションの変更は有効にできません,新しく作成されたコンテナにのみ有効;"log-driver":"json-file","log-opts":{"max-size":"500m","max-file":"3"}

docker inspect -f '{{.HostConfig.LogConfig}}' test1
# { json-file map[max-file:10 max-size:2m]}
more /var/lib/docker/containers/25d2d645bfc9e6530039d6aac890f69dd9af33f8f966adc2d7287b74964678e3/25d2d645bfc9e6530039d6aac890f69dd9af33f8f966adc2d7287b74964678e3-json.log
# {" log":"Mem: 3164836K used, 696576K free, 45448K shrd, 2104K buff, 1633504K cached\n","stream":"stdout","time":"2020-06-18T03:34:33.738111441Z"}
# {" log":"CPU:   0% usr   0% sys   0% nic 100% idle   0% io   0% irq   0% sirq\n","stream":"stdout","time":"2020-06-18T03:34:33.73833528Z"}
# {" log":"Load average: 0.16 0.20 0.19 1/639 5\n","stream":"stdout","time":"2020-06-18T03:34:33.738342617Z"}

# 例3.各コンテナが使用できるディスク容量を1Gに設定します。
{" data-root":"/data/docker","storage-driver":"overlay2","storage-opts":["overlay2.override_kernel_check=true","overlay2.size=1G"],}

# 例4.ログファイルをクリーンアップします
# rmによって-rfまたはファイルマネージャがファイルを削除すると、ファイルシステムのディレクトリ構造からリンクが解除されます。コンテナが停止していることが前提です。そうでない場合、ファイルがプロセスによって占有されていると、ディスク領域は常に占有されます。
cat /dev/null>/var/lib/docker/containers/<container_id>/containerid-json.log
3. DockerクライアントによってリモートリンクされるようにDockerDeamonを構成するにはどうすればよいですか?#####

回答:docker.service構成ファイルを変更して、dockerdの起動パラメーターに -H tcp://0.0.0.0:2375を追加する必要があります。

# 起動パラメータを変更する
nano /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd://--containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

# デーモンをリロードし、dockerを再起動します
systemctl daemon-reload
systemctl restart docker

# 監視状況を確認する
netstat -tlnp
# Active Internet connections(only servers)
# Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
# tcp6       00:::2375:::*                    LISTEN      11389/dockerd

# シンプル認証リモートアクセス
curl http://127.0.0.1:2375/containers/json | jq
[{" Id":"25d2d645bfc9e6530039d6aac890f69dd9af33f8f966adc2d7287b74964678e3","Names":["/test1"],"Image":"test1","ImageID":"sha256:5ec0e2b89f7aadb6178c17b3db73aba2e209f9556a436562de7f32b077b776bd","Command":"top -b -d 2","Created":1592451272,"Ports":[],"Labels":{"Author":"WeiyiGeek","Description":"Test Dockerfile"},"State":"running","Status":"Up 35 minutes","HostConfig":{"NetworkMode":"default"},"NetworkSettings":{"Networks":{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"257f6a8500710d76efba6a1c9be8c0f10b4308afb481baf1e9ba77cf98f596bd","EndpointID":"ac4518815359da7b8182167dfeeec728c0ea51accd1736719005f1596797e944","Gateway":"172.17.0.1","IPAddress":"172.17.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02","DriverOpts":null}}},"Mounts":[]}]

WeiyiGeek.Dockerd-TCP

4. 実行中のコンテナのマッピングポートを変更します#####

説明:実行中のコンテナーがマッピングポートを変更するために推奨される方法2および3。

$nano /var/lib/docker/containers/d415211e52da6ca66aeee3c81b38be609ffac59522b06e0ff9fa253e29fa441a/hostconfig.json
# 次のjson形式に従って、マップするポートを設定します
" PortBindings":{"443/tcp":[{"HostIp":"","HostPort":"9000"}],"80/tcp":[{"HostIp":"","HostPort":"9001"}]}

$systemctl restart docker
$docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                             PORTS                                                 NAMES
d415211e52da        onlyoffice/documentserver   "/bin/sh -c /app/ds/…"43 minutes ago      Up 14 seconds                      0.0.0.0:9001->80/tcp,0.0.0.0:9000->443/tcp           onlyoffice

回答:Dockerに関連するローカルリソースはデフォルトで/ var / lib / docker /ディレクトリに保存され、overlay2ファイルシステムがデフォルトで例として取り上げられています。
コンテナディレクトリにはコンテナ情報が格納され、グラフディレクトリには画像情報が格納され、aufsディレクトリには特定の画像レイヤファイルが格納されます。

$ll /var/lib/docker/image/overlay2/distribution/diffid-by-digest/sha256/
合計金額16-rw-r--r--1ルートルート716ヶ月415:15 3c78d525c5d6e0101e4f53d5e4ee827c838b9d346f44e40db49c66638040d980
- rw-r--r--1ルートルート716ヶ月415:15 44559339aea968e196d4930b3d79068926964f415c0fccd3e1b197a5dd928ee7
6. コンテナを再起動するたびにIPアドレスを変更するのではなく、固定IPアドレスをコンテナに割り当てるにはどうすればよいですか? _

回答:ネットワーク設定用の固定サブネットとコンテナの固定IPの確立をカスタマイズします

$ docker network create -d bridge --subnet 172.25.0.0/16 my-net
$ docker run --network=my-net --ip=172.25.3.3-itd --name=my-container busybox
7. 作成したイメージまたは実行中のコンテナのストレージとマウントパスを変更します#####

説明:作成されたイメージまたは実行中のコンテナーに新しくマウントされたパスに関連する操作プロセスを変更します。
プロセスは次のとおりです。

#1. ドッカーコンテナとサービスを停止します
sudo docker stop $(docker ps -a | awk '{ print $1}'| tail -n +2)
sudo service docker stop

#2. バックアップコンテナ構成ファイル
cd /var/lib/docker/containers/de9c6501cdd3
cp hostconfig.json{,.bak}
cp config.v2.json{,.bak}

#3. hostconfigのコロンの前の構成パスを変更します
cat -n hostconfig.json | grep -C 5"Binds"

#4. configのソース構成パスを変更します
cat config.v2.json
" MountPoints":{"/etc/mysql/my.cnf":{"Source":"/home/server/mysql/conf/my.cnf","Destination":"/etc/mysql/my.cnf","RW":true,"Name":"","Driver":"","Relabel":"","Propagation":"rprivate","Named":false,"ID":""},....

#5. 次に、ドッカーサービスを開始します
8. Dockerコンテナのネットワーク名前を入力する方法は?#####

説明:Dockerは、コンテナーの作成後に、ホストホストの/ var / run / netnsディレクトリにある関連するネットワーク名前付けファイルを削除しました。
したがって、コンテナのネットワークネームスペースは、ホストホスト上で表示またはアクセスできません。

# 次の操作で、ネットワーク名前を表示および設定できます
$ docker inspect --format='{{. State.Pid}} ' $container_id  #コンテナプロセスIDを取得します
1234
$ sudo ln -s /proc/1234/ns/net /var/run/netns/ #procディレクトリ内の対応するネットワーク名前付けファイルをにリンクします/var/run/netnsディレクトリ。
# 次に、ホストホスト上のコンテナのネットワーク名前付け情報を確認できます。例えば**
$ sudo ip netns show
1234

# 操作コンテナの名前を設定します
$ sudo ip netns exec 1234 ifconfig eth0 172.17.0.100/16
9. Dockerローカルデータをリセットする方法#####

$ sudo rm -rf / var / lib / docker#この操作により、イメージやコンテナーを含むすべてのDockerローカルデータが削除されることに注意してください。

0 x02ピットに####

エラー問題0の報告:containerd.io> = 1.2.2-3が必要ですが、どのプロバイダーもインストールできません
環境:CentOS 8 1911(コア)
エラーの問題:

package docker-ce-3:18.09.9-3.el7.x86_64 requires containerd.io >=1.2.2-3, but none of the providers can be installed
 - conflicting requests
 - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
 - package containerd.io-1.2.13-3.1.el7.x86_64 is excluded
 - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
 - package containerd.io-1.2.2-3.el7.x86_64 is excluded
 - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
 - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
 - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded(追加してみてください'--skip-broken'インストールできないパッケージをスキップする、または'--nobest'最良のソフトウェアパッケージを使用するだけではありません)

解決:

yum install -y wget
wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
yum install -y containerd.io-1.2.6-3.3.el7.x86_64.rpm
yum install docker-ce docker-ce-cli

エラー質問1:DeviceCreate(createSnapDevice)の実行中にエラーが発生しましたdm_task_runが失敗しました
エラーメッセージ:

docker:Error running DeviceCreate(createSnapDevice) dm_task_run failed

解決策:リソースプールメタデータ[https://stackoverflow.com/questions/30719896/docker-dm-task-run-failed-error](https://stackoverflow.com/questions/30719896/docker-dm-task-run-failed-error)を再構築します

# 異なるインストールパスは異なる場合があります
service docker stop
thin_check /var/lib/docker/devicemapper/devicemapper/metadata
thin_check --clear-needs-check-flag /var/lib/docker/devicemapper/devicemapper/metadata
service docker start

エラー質問2:デーモンからのエラー応答:devmapper:エラーマウント:無効な引数
エラーメッセージ:

docker start e7e
Error response from daemon: devmapper: Error mounting '/dev/mapper/docker-253:4-11534337-ee772425c4996ca581e5c234806adf41aede9424a83ce1402596105a9f66434d' on '/export/docker/devicemapper/mnt/ee772425c4996ca581e5c234806adf41aede9424a83ce1402596105a9f66434d': invalid argument

エラーの理由:コンテナは、selinuxが有効になっているときに作成されました。次に、/ etc / selinux / configを無効としてselinuxに変更しました。

物理マシンを再起動した後、selinuxは閉じた状態になり、selinuxが有効になっているときに最初に作成されたコンテナは起動できず、このエラーを報告できません。

修理方法:

主に2つのタイプがあります。
1. selinuxをリセットして有効にし、物理マシンを再起動して修正できます。
2. コンテナの構成を変更します。たとえば、コンテナの構成は次のとおりです。/var/lib/docker/containers/e7ef71494940ba293be4b3f74198bf34835c35537810053b051d9a6c33adbd32/config.v2.jsonファイル。その中で"MountLabel":"system_u:object_r:svirt_sandbox_file_t:s0:c12,c257","ProcessLabel":"system_u:system_r:svirt_lxc_net_t:s0:c12,c257"やり直して変更します"MountLabel":"","ProcessLabel":""、次にdockerデーモンを再起動すると、コンテナを修復できます。

エラー質問3:デーモンからのエラー応答:devmapper:シンプールには155398の空きデータブロックがあり、これは必要な最小の163840の空きデータブロックよりも少ないです。
エラーメッセージ:

/usr/bin/docker-current: Error response from daemon: devmapper: Thin Pool has 155398 free data blocks which is less than minimum required 163840 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior

解決:

sudo docker rm $(sudo docker ps -q -f status=exited)
sudo docker volume rm $(sudo docker volume ls -qf dangling=true)
sudo docker rmi $(sudo docker images --filter "dangling=true"-q --no-trunc)

エラー質問4:[graphdriver]以前のストレージドライバー\” devicemapper \”が失敗しました:devmapper:ベースデバイスのUUIDとファイルシステムの検証に失敗しました:devmapper:現在のベースデバイス
動作環境:CentOS 7.3.1611、Dockerバージョン1.12.6-16.el7.centis.x86_64、API 1.24;
エラーメッセージ:

# Docker起動エラー
docker.service - Docker Application Container Engine
 Loaded:loaded(/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
 Drop-In:/usr/lib/systemd/system/docker.service.d
   └─flannel.conf
 Process:5226 ExecStart=/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY(code=exited, status=1/FAILURE)
 Main PID:5226(code=exited, status=1/FAILURE)
# エラーの要点
dockerd-current[5226]: time="..." level=info msg="libcontainerd: new containerd process, pid: 5238"
dockerd-current[5226]: time="..." level=warning msg="devmapper: Usage of loopback devices is strongly discouraged for production use. Please use `--storage-opt dm.thinpooldev` or use `man docker` to refer to dm.thinpooldev section."
node-198 dockerd-current[5226]: time="2020-01-18T17:00:27.872191345+08:00" level=error msg="[graphdriver] prior storage driver \"devicemapper\" failed: devmapper: Base Device UUID and Filesystem verification failed: devmapper: Current Base Device UUID:59df6192-df22-4d88-9e90-02755e7e3242 does not match with stored UUID:24907e3f-5114-4948-91ea-c1a4e92854ef. Possibly using a different thin pool than last invocation"
node-198 dockerd-current[5226]: time="2020-01-18T17:00:27.872410561+08:00" level=fatal msg="Error starting daemon: error initializing graphdriver: devmapper: Base Device UUID and Filesystem verification failed: devmapper: Current Base Device UUID:59df6192-df22-4d88-9e90-02755e7e3242 does not match with stored UUID:24907e3f-5114-4948-91ea-c1a4e92854ef. Possibly using a different thin pool than last invocation"

エラーの原因:Dockerを格納しているメタデータディスクがマウントされているため、特定のシャットダウン中にストレージが異常にシャットダウンされました。解決策が解決された後、マシンがリモートNFSディスクにマウントされました。マウント後、ディスクのUUIDが変更され、ループバックが発生しました。このメソッドは、DockerのDeviceMapperのストレージプールに接続できません。

解決策:loop0の実際のuuidを確認し、deviceset-metadataのUUIDを変更します

# システムディスクUUIDを表示
$ls -alh /dev/disk/by-uuid
$blkid
#59 df6192-df22-4d88-9e90-02755e7e3242

# 従来のパス
/var/lib/docker/devicemapper/metadata/deviceset-metadata
# カスタムパス
/disk/docker/devicemapper/metadata/deviceset-metadata
# コンテンツ設定
{" next_device_id":1,"BaseDeviceUUID":"59df6192-df22-4d88-9e90-02755e7e3242","BaseDeviceFilesystem":"xfs"}

予防:

エラーメッセージ5:ループバックデバイスの使用は本番環境での使用は強くお勧めしません

# ドッキング情報または起動時に表示されます
WARNING: Usage of loopback devices is strongly discouraged for production use

エラーの理由:dockerをループバックモードで実行することは強くお勧めしません。

解決:

# 方法1:DockerスタートアップアイテムにDockerを追加します_STORAGE_OPTIONS(推奨されません,警告を無視してください)
DOCKER_STORAGE_OPTIONS="--storage-opt dm.no_warn_on_loop_devices=true"

# 方法2:dockerデーモンが起動したら、デバイスマッパーのメタデータストレージとdockerのミラーリングされたデータストレージを追加して、lvmまたは独立したディスクパーティションのいずれかの独立したブロックデバイスを選択します。
- - storage-opt dm.datadev=/dev/xxxx  --storage-opt dm.metadatadev=/dev/xxx

WeiyiGeek。ソリューション

エラーメッセージ6:DockerDeamonサービスのソケット/ TCPを接続できません

#1. 起動/ドッカーを停止します。
systemctl startdockerを起動します
デーモン再起動sudosystemctlデーモン-reload
dockerサービスを再起動しますsystemctlrestart docker
Sudoサービスドッカーの再起動
ドッカーサービスドッカーストップを閉じる
docker systemctl stopdockerを閉じます
#2. 現在のユーザーをdockerユーザーグループに追加してから、現在のユーザーに再度ログインします
sudo gpasswd -a ${USER} docker
#3. 特権の高いユーザーとしてdockerを実行する
sudo systemctl start docker

例外メッセージ7:指定されたコンテナは現在の接続とnetworksキーワードcustom networkに接続されていますが、アプリケーションはまだ相互接続できません
問題:Docker-composeを使用して複数のコンテナーをデプロイすると、指定したコンテナーを現在の接続とnetworkキーワードcustom networkに接続するように設定されているにもかかわらず、アプリケーションを相互接続できません。
理由:firewalldはdockerのIPアドレスを信頼していません
解決策:すべてのdockeripをホワイトリストに追加します。

$firewall-cmd  --zone=trusted --add-source=172.17.0.1/16--permanent
success
$firewall-cmd  --zone=trusted --add-source=172.20.0.1/16--permanent
success
$firewall-cmd --reload
success

WeiyiGeek。コンテナの相互接続

例外メッセージ8:プルイメージx509証明書の有効期限が切れているか、まだ有効ではありません
説明:ミラーミラーソースをプルするようにdockerを設定します。ミラーをプルしてダウンロードすると、証明書の検証に失敗するように求められます。

$sudo docker pull onlyoffice/documentserver
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid

エラーの原因:通常、ローカルシステム時間エラーはエラー証明書の有効期限が切れるため、最初にローカルシステム時間を確認してください

$date
2019 5月19日(日):57:54 CST

解決策:時刻を現在の時刻に同期して解決します: ntpdate cn.pool.ntp.org;

例外情報9.docker infoの実行時に次の警告が表示されます警告:bridge-nf-call-iptablesが無効になっています
問題の説明:

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

解決策:ブリッジされたネットワークトラフィックを表示するようにiptablesを構成します

cat >/etc/sysctl.conf<<'EOF'
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
EOF
sysctl -p

例外メッセージ10.コンテナイメージを構築するときに、「そのようなファイルまたはディレクトリがありません」というエラーメッセージstandard_init_linux.go:211:execユーザープロセスが表示されます。
問題の回復:

$docker-compose up
Starting blog ... done
Attaching to blog
blog    | standard_init_linux.go:211: exec user process caused "no such file or directory"
blog exited with code 1

問題の原因:

例外情報11.デーモンからのエラー応答:ドライバーはエンドポイントloving_bassiでの外部接続のプログラミングに失敗しました(37b4c399f676cf46e35fd26b2298ad81aac87739d8aee416f449e36c6cb22503)
問題情報:docker:デーモンからのエラー応答:エンドポイントloving_bassi(37b4c399f676cf46e35fd26b2298ad81aac87739d8aee416f449e36c6cb22503)での外部接続のプログラミングに失敗したドライバー:( iptablesが失敗しました:iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 90 to-destination 172.17.0.2:80!-i docker0:iptables:その名前のチェーン/ターゲット/一致はありません。
問題の原因:iptablesのdocker0ネットワークカードにそのようなチェーン、ターゲット、およびルールの一致がありません。つまり、dockerサービスの開始時に定義されたカスタムチェーンDOCKERが何らかの理由でクリアされます。
解決策:dockerサービスを再起動し、カスタムチェーンDOCKERを再生成してから、コンテナーを起動します。

# pkill docker
# iptables -t nat -F
# ifconfig docker0 down
# brctl delbr docker0
# service docker restart

例外情報12.docker portコマンドを使用してコンテナのポートをマップすると、システムは「エラー:xxx用に公開されたパブリックポート「80」がありません」というエラーを報告します
問題の原因:Dockerfileは、ミラーを作成するときにEXPOSEを介して正しいオープンポートを指定する必要があります。
解決策:コンテナーの開始時に PublishAllPort = trueを指定します。

**例外情報13.メモリとスワップの制限を使用してコンテナを起動すると、「警告:カーネルはcgroupスワップ制限をサポートしていません。警告:カーネルはスワップ制限機能をサポートしていません。制限は破棄されました。」という警告が報告されます。 ****
問題の原因:システムはデフォルトでメモリとスワップ使用量の統計機能を有効にしていないため、この機能を導入するとパフォーマンスが低下します。この機能を有効にするには、次のアクションを実行できます。
解決:

例外情報14.Docker警告警告:スワップ制限のサポートなし
問題の説明:Linuxオペレーティングシステムのdockerのメモリ制限に「警告:スワップ制限のサポートがありません」という警告は、おそらくスワップメモリの制限がサポートされていないことを意味します。
解決策:Ubuntu 20.04TLSでテスト済み

# 1. 編集/etc/default/grubファイル。
vim /etc/default/grub

# 2. GRUBを探す_CMDLINE_LINUX=構成項目と追加「cgroup_enable=memory swapaccount=1”。

# 3. ファイルを保存して、次のコマンドを実行します。
sudo update-grub

# 4. サーバーを再起動します
reboot

0 x03インタビューの質問####

回答:ADDコマンドを使用する場合、コピーするソースファイルがtarパッケージの場合、コンテナをビルドするときにtarパッケージを指定したディレクトリに解凍するのに役立ち、 copyコマンドを使用してもtarパッケージは解凍されません
もう1つの違いは、ADD命令はビルドコンテキストまたはURLのいずれかにファイルを追加できるのに対し、COPYはビルドコンテキストにのみファイルを追加できることです。

回答:使用シナリオの違いCMD命令は、コンテナの起動後にデフォルトで実行されるコマンドとパラメータであり((複数のCMDが定義されている場合は、最後のCMDのみが実行されます))、ENTRYPOINTを使用して実行前にアプリケーションを準備します(コンテナをまたはサービスとして実行します);
注:少なくとも1つのCMDまたはENTRYPOINT命令をDockerfileに設定する必要があります。

Recommended Posts

n1.Dockerのインストールと操作の例外が発生しました
ubuntuDockerのインストールとRancherの展開
Ubuntuのインストールと展開Redash操作ノート(2020.08)
CentOS7ドッカーのインストール
CentOS7 DockerNginxの展開と操作の詳細な説明
Centosでのconfluence6.3操作記録のインストールとクラッキング
CentosでのJira7操作記録のインストールとクラッキング
1つは、ピットにドッキングする(win10とUbuntuのインストール)
Ubuntuシステムのインストールと構成に関する一般的な例外と解決策
PyCUDA-Ubuntu14.04のインストールとテスト
OpenMPI-Ubuntuのインストールと構成
Ubuntuの紹介とインストール
ドッカー(領事とジェンキンス)
DockerCentOSのインストール方法
Centos7dockerのインストールの詳細