肝臓の仕上げ、Docker コンテナーのテスト - 一般的な問題と解決策 (概要)


序文

質問 1: nginx コンテナを作成し、nginx.conf ファイルをマウントしようとすると、エラーが報告されます: 「/root/nginx.conf」を rootfs の「/etc/nginx/nginx.conf」にマウントすると、procfd を介してマウントされます。 : ディレクトリではありません:

自分のサーバー上で、nginx イメージを使用してコンテナーを作成し、イメージに付属する nginx.conf ファイルをマウントしたいと考えています。

docker run -it -d -v ~/nginx.conf:/etc/nginx/nginx.conf nginx

エラー:

[root@poloyy ~]# docker run -it -d -v ~/nginx.conf:/etc/nginx/nginx.conf nginx
e0e4b40446a64927603b85854c3a6472b2dfa5681fcbfa0e170c16b15e5c8fdd
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting "/root/nginx.conf" to rootfs at "/etc/nginx/nginx.conf" caused: mount through procfd: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
[root@poloyy ~]# client_loop: send disconnect: Broken pipe

主要なエラー メッセージを抽出します。

mounting "/root/nginx.conf" to rootfs at "/etc/nginx/nginx.conf" caused: mount through procfd: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)?

「/root/nginx.conf」を「/etc/nginx/nginx.conf」の rootfs にマウントすると、次の結果が得られました: procfd 経由でマウント: ディレクトリではありません: 不明: ファイルにディレクトリをマウントしようとしましたか (またはその逆) )

根本原因:ファイルの直接マウントはサポートされていません。マウントできるのは
フォルダーのみです。ファイルをマウントするには、ホストにも同じ名前の対応するファイルが必要です。

解決策:まず、 nginx.conf をマウントせずにコンテナから
nginx.conf をコピーし、次に nginx.conf を自分で変更し、構成項目をカスタマイズして、正式に使用する nginx コンテナを作成できます。


テスト コンテナから nginx.conf をコピーします。
もちろん、nginx.conf はインターネット上でも見つけることができます。最も重要なことは、ホスト マシンに nginx.conf が必要であることです。

docker run --name test -d nginx  
docker cp test:/etc/nginx/nginx.conf /data/

正式な nginx コンテナを作成し、nginx.conf ファイルをマウントして
権限を付与します。

docker run --privileged -it -p 80:80 \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /data/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
-v /data/nginx/html:/usr/share/nginx/html:rw \
-v /data/nginx/logs:/var/log/nginx -d nginx

質問 2: Mysql コンテナの実行後にエラーが報告されます: [エラー] InnoDB: REDO ログ ファイル './ib_logfile0' が存在します

ローカル Mac Docker で mysql コンテナを実行して開始します。

docker run -d -p 3306:3306 --name mysql1 -v /Users/polo/data/conf:/etc/mysql/conf.d -v /Users/polo/data/mysql:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

現象:
コンテナログを確認するとエラーが報告されており、ローカルのnavicatに接続できません。

A1

ポイントは最初の文です。特定のファイルはすでに存在しており、通常は環境が上書きされます。

根本原因:
以前に brew で mysql をインストールしましたが、アンインストールされましたが、ローカル ファイルは削除されていませんでした

解決:

brew uninstall mysql
rm -rf /usr/local/var/mysql 

まずmysqlをアンインストールしてから、ローカルファイルを削除します

Mysqlコンテナの通常起動のログ

A2

エラーログがありません

質問 3: コンテナ内で取得された時刻がホストの時刻と異なる

コンテナとホストでそれぞれ date コマンドを実行します。

A3

ご覧の通り、時代が全く違います

解決策:
方法 1:
コンテナーの実行時に、/etc/localtime ディレクトリをマウントします。

docker run -d -v /etc/localtime:/etc/localtime:ro --name git 

A4

ポイントは次のとおりです。 -v /etc/localtime:/etc/localtime:ro

方法 2:

docker cp /etc/localtime [容器ID或名字]:/etc/localtime
以下は、私がまとめた 2023 年の最も完全なソフトウェア テスト エンジニア学習知識アーキテクチャ システム図です。

1. Pythonプログラミングの入門から習得まで

画像の説明を追加してください

2.インターフェース自動化プロジェクトの実戦

画像の説明を追加してください

3. Web自動化プロジェクトの実戦

画像の説明を追加してください

4. アプリ自動化プロジェクトの実戦

画像の説明を追加してください

5. 一流メーカーの再開

画像の説明を追加してください

6. DevOps システムのテストと開発

画像の説明を追加してください

7. 一般的に使用される自動テストツール

画像の説明を追加してください

8、JMeterのパフォーマンステスト

画像の説明を追加してください

9. まとめ(最後にちょっとしたサプライズ)

全力を尽くしてこそ無限の可能性が開ける 努力すれば輝かしい未来に出会える どんなに困難なことがあっても粘り強く続ければ必ず成功につながる 夢を胸に勇敢に進む限り私たちは必ず素晴らしい結果を達成するでしょう。

たゆまぬ努力があってこそ、私たちは自らの輝きを生み出すことができ、前進する勇気があってこそ、あらゆる困難を乗り越えることができるのです。たとえ道がどんなに曲がりくねっていても、心の中に夢がある限り、成功の向こう側へ航海することができます。自分を信じて頑張れば、未来は無限の可能性を秘めたステージになります!

すべての努力は明日の成果になる、信念を持って闘い続ければ、繭を抜け出して蝶となり、羽を広げて高く飛べる。より良い未来を実現するために、自分の力を信じ、夢の光を咲かせ、追い続けてください。

おすすめ

転載: blog.csdn.net/shuang_waiwai/article/details/131598253