[ TOC]
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
説明:デフォルトでは、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"}
説明:ドッカーイメージが長時間多くのディスクスペースを占有することに加えて、コンテナーの実行中に大量のログを書き込むことも頭痛の種であり、監視警告なしでいつでもビジネスがダウンします(少なくとも私は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
docker system df -v
を実行して、各コンテナが占めるディスク領域を一覧表示します。現在のサイズが特定のしきい値を超えると、コンテナIDをコンテナIDに従ってアプリケーション情報に関連付けることができます。上)それを削除します(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
回答: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
説明:実行中のコンテナーがマッピングポートを変更するために推奨される方法2および3。
最も簡単な解決策、多くの場合、テスト環境で使用します
)docker commit
の新しいイメージを使用して、コンテナーのファイル変更と構成情報を新しいイメージにコミットしてから、この新しいイメージを使用してコンテナーを再起動します。この方法の利点は、この方法が[Suホスト](https://cloud.tencent.com/product/cdh?from=10680)他のコンテナが影響を及ぼします; docker stop container01 docker commit container01 new_image:tag docker run --name container02 -p 80:80 new_image:tag$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
回答:ネットワーク設定用の固定サブネットとコンテナの固定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
説明:作成されたイメージまたは実行中のコンテナーに新しくマウントされたパスに関連する操作プロセスを変更します。
プロセスは次のとおりです。
#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. 次に、ドッカーサービスを開始します
説明: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
$ sudo rm -rf / var / lib / docker
#この操作により、イメージやコンテナーを含むすべてのDockerローカルデータが削除されることに注意してください。
エラー問題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"}
予防:
aufs / Device mapper / btrfs / overlayfsとzfs
で、どちらもコピーオンライト(CoW)テクノロジーを使用していますが、CentOSではデフォルトでaufsはサポートされていません。エラーメッセージ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
問題の原因:
unix(/ n)
ではなく dos(/ r / n)
です。例外情報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スワップ制限をサポートしていません。警告:カーネルはスワップ制限機能をサポートしていません。制限は破棄されました。」という警告が報告されます。 ****
問題の原因:システムはデフォルトでメモリとスワップ使用量の統計機能を有効にしていないため、この機能を導入するとパフォーマンスが低下します。この機能を有効にするには、次のアクションを実行できます。
解決:
/ etc / default / grub
ファイル(例としてUbuntuシステム)を編集し、GRUB_CMDLINE_LINUX = "cgroup_enable = memory swapaccount = 1"
を構成します$ sudoupdate-grub
そしてシステムを再起動します。例外情報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
インタビューの質問と回答2.相互作用しているコンテナの端末を、終了せずに一時的に終了するにはどうすればよいですか。 *
回答: Ctrl-p Ctrl-q
を押します。Ctrl-cを押すと、コンテナ内のアプリケーションプロセスが終了することが多く、その結果、コンテナが終了します。
インタビューQ&A 3. DockerfileのADDとCOPYの違いは?*
回答:ADDコマンドを使用する場合、コピーするソースファイルがtarパッケージの場合、コンテナをビルドするときにtarパッケージを指定したディレクトリに解凍するのに役立ち、
copyコマンドを使用してもtarパッケージは解凍されません
。
もう1つの違いは、ADD命令はビルドコンテキストまたはURLのいずれかにファイルを追加できるのに対し、COPYはビルドコンテキストにのみファイルを追加できることです。
回答:使用シナリオの違いCMD命令は、コンテナの起動後にデフォルトで実行されるコマンドとパラメータであり((複数のCMDが定義されている場合は、最後のCMDのみが実行されます))、ENTRYPOINTを使用して実行前にアプリケーションを準備します(コンテナをまたはサービスとして実行します);
注:少なくとも1つのCMDまたはENTRYPOINT命令をDockerfileに設定する必要があります。
Recommended Posts