ホームページ > 運用・保守 > Docker > docker 実行時の exec エラーの問題を解決する方法

docker 実行時の exec エラーの問題を解決する方法

藏色散人
リリース: 2022-01-12 14:12:37
オリジナル
8702 人が閲覧しました

docker が exec を実行するときのエラーの解決策: 1. スクリプトの最初の行を「/bin/bash」に置き換えます; 2. 「docker exec -d service_name /bin/bash -c '/opt」を実行します/start.sh'」。

docker 実行時の exec エラーの問題を解決する方法

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

Docker exec はスクリプト ソリューションの実行に失敗しました

# #バックグラウンドの紹介

Docker コンテナには、使用時にバックグラウンドで実行する必要があるスクリプトがありますが、docker exec を介してこのスクリプトを呼び出しても、望ましい結果は得られません. その結果、探索の道が始まりました!

元のスクリプト

docker exec -it service_name /bin/bash -c '/opt/start.sh'
ログイン後にコピー

この start.sh の機能は、バックグラウンドで 2 つのサービスを開始することです

#!/bash
nohup start1.sh > start1.log 2>&1 &
sleep 5
nohup start2.sh 2>&1 &
echo 'server started'
ログイン後にコピー

問題の場所

##1. 変則的なスクリプトの書き方

##上記のコマンドから、docker 起動時の式がわかります /bin/bash

そしてスクリプトで指定されているのは、確かに

/bash です。スクリプトの最初の行の内容がシェル スクリプト インタプリタのパスを指定していることは誰もが知っており、この指定されたパスは最初の行にのみ配置できます。ファイルの行。したがって、同じインタープリタを使用するように、スクリプトの最初の行を /bin/bash に置き換える必要があります#2。起動パラメータに問題があります

-it パラメーターは、docker exec の実行中に使用されます。

-t を使用すると、docker が疑似端末を割り当ててバインドできるようになります。 docker 実行時の exec エラーの問題を解決する方法

-i を入力してコンテナの標準入力を開いたままにします
  • これにより、バックグラウンド実行後に最初の start.sh のみを実行できるようになります関数、実行後にターミナルも終了したため、
  • #ヘルプを参照してください。-d、バックグラウンド クラウド スクリプトがあります。これは要件を満たしています
変更プロセス

docker exec -d service_name /bin/bash -c '/opt/start.sh'
ログイン後にコピー
#!/bin/bash
nohup start1.sh > start1.log 2>&1 &
sleep 5
nohup start2.sh 2>&1 &
echo 'server started'
ログイン後にコピー

推奨される学習: 「

docker チュートリアル

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート