docker CMD/ENTRYPOINT が sh スクリプトを実行する問題の解決策: not found/run.sh:

docker CMD/ENTRYPOINT が sh スクリプトを実行する問題の解決策: not found/run.sh:

Dockerfile の設定に問題はありませんが、ENTRYPOINT コマンドを実行するとエラーが発生するのはなぜでしょうか?

コンテナは起動するとすぐに終了しました。

理由が見つかるまで、たくさんの情報を調べて長い間考えました。

COPY命令によりrun.shがコンテナにコピーされます。しかし、ローカルマシンはWindowsであり、デフォルトの改行文字が\nであるため、コピー後に実行することはできません。

解決策は簡単です。ファイル形式を LF に切り替えるだけです。

補足知識: docker でコンテナを起動すると、CMD によって呼び出される sh スクリプトの if コマンドが予期しないシンボル if[[ を報告します。 解決策

最近、Dockerfile でイメージを作成しました。コンテナを起動するために、CMD で sh スクリプト (start.sh) が呼び出されました。docker run で起動したところ、起動に失敗しました。docker logs container ID を実行したところ、次のエラーが見つかりました: Unexpected symbol if [[

外部 Linux システムで start.sh を直接実行することに成功しました。docker exec を介してコンテナに入り、コンテナ内でエラーなしで start.sh を呼び出しました。コマンドで起動する必要のあるすべてのプログラムが正常に起動しました。

スクリプトを直接実行すると問題ないのですが、docker run を経由するとエラーが発生してしまい困惑しています。

start.shのエラーコードセグメントは次のとおりです。

if [[ -e /home/dc/testnn-aaa.zip ]];then
 rm -rf /home/testnn-aaa
 解凍 -q -o -d /home testnn-aaa.zip
 echo "zip の解凍が完了しました" 
それ以外 
 echo "dc zip が存在しません"
フィ

確認して比較したところ、私の start.sh にもエラー文の前に if 文があるのにエラーが報告されないため、2 つの場所の違いは最初の if が単一の [] を使用していることであることがわかりました。コードを [] に変更すると成功します。変更内容は次のとおりです。

if [ -e /home/dc/testnn-aaa.zip ];then

docker CMD/ENTRYPOINT が sh script: not found/run.sh: を実行する問題を解決する上記の記事は、エディターがあなたと共有した内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COM をサポートしていただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerfile における ENTRYPOINT と CMD の違い
  • 非ルートユーザーを使用してDockerコンテナでスクリプト操作を実行する
  • Docker ファイルの保存パス、コンテナの起動コマンド操作の取得

<<:  MySql インデックスを表示および最適化する方法

>>:  レスポンシブ原則のソースコード分析のVue解釈

推薦する

MySQL での mysqladmin 日常管理コマンドの概要 (必読)

mysqladmin ツールの使用形式は次のとおりです。 mysqladmin [オプション] コ...

Vueはコンピュータカメラを呼び出して写真機能を実現します

この記事の例では、コンピュータカメラを呼び出して写真機能を実現するためのvueの具体的なコードを参考...

Windows 10 の仮想マシンに Mac システムをインストールするグラフィック チュートリアル

1. 仮想マシンバージョン15.5.1をダウンロードする公式サイトから直接最新バージョンをダウンロー...

Linux yum パッケージ管理方法

導入yum (Yellow dog Updater, Modified) は、Fedora、RedH...

Ubuntu 18.04 コマンドでタッチパッドを無効/有効にする

Ubuntu では、ショートカット キーでタッチパッドをオフにできない状況によく遭遇します。この問題...

htmlダウンロード機能の詳しい説明

新しいプロジェクトは基本的に終了しました。フロントエンドとバックエンドを分離して統合を完了したのは初...

aタグに下線を付け、クリック前後で色を変える方法

コードをコピーコードは次のとおりです。リンクフォントサイズ: 12px;色: #000000;テキス...

CSS ボーダーは四隅の実装コードを追加します

1.html <div class="ログインボディ"> <...

Web デザイン体験: 5 つの優れた Web デザイン コンセプトの完全分析 (画像)

他の種類のデザインとは異なり、Web デザインは時代の発展とともに常に変化しています。したがって、W...

Vueのキーボードイベントの詳細な説明

目次共通キーエイリアスエイリアスが指定されていないキーシステム修飾キーカスタムキーエイリアス要約する...

Vue ページに img 画像を導入する方法

HTMLを学ぶとき、画像タグ<img>は画像を導入します <img src=&qu...

Linux ipcsコマンドの使用

1. コマンドの紹介ipcs コマンドは、Linux のプロセス間通信機能の状態を報告するために使用...

Vueフロントエンドパッケージングの詳細なプロセス

目次1. パッケージ化コマンドを追加する2. パッケージ化されたコードを実行する3. パッケージ化し...

MySQL 5.7.20 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事では、MySQL 5.7.20のインストールと設定方法を参考までに紹介します。具体的な内容は...