ホームページ > バックエンド開発 > Golang > ファイルをコンテナにコピーした後、ファイルが見つからないのはなぜですか?

ファイルをコンテナにコピーした後、ファイルが見つからないのはなぜですか?

王林
リリース: 2024-02-09 08:24:10
転載
643 人が閲覧しました

ファイルをコンテナにコピーした後、ファイルが見つからないのはなぜですか?

php Xiaobian Yuzai は、コンテナ テクノロジを使用するときに、ファイルをコンテナにコピーした後にファイルが見つからないという一般的な問題に遭遇することがあります。この問題は通常、Docker などのコンテナ化プラットフォームを使用するときに発生します。原因としては、ファイル パスが正しく設定されていないか、コンテナ内のファイル システムがホストと一致していないことが考えられます。この問題を解決するには、絶対パスを使用するか、共有フォルダーを介してファイルをコンテナーにコピーするなど、さまざまな方法があります。この問題を解決する前に、まずコンテナのファイル システムとファイル パスの間のマッピング関係と、ファイル パスを正しく構成する方法を理解する必要があります。

質問内容

以下のようなdockerfileがあります:

リーリー

hello-world go ファイルからバイナリを構築するだけです。ただし、次の docker-compose 設定でこのコンテナを実行しようとすると、「exec ./start.sh: no such file or directory」と表示されます。

リーリー

ディレクトリ構造は

です リーリー

したがって、start.sh は、copy を介して <code>builder コンテナにロードする必要があります。 . 行についても同様で、copy --from=builder /app/start.sh /app/start.sh を介して 2 番目のコンテナに渡す必要があります。

コンテキスト、start.sh の内容は次のとおりです:

リーリー

私を最も混乱させる部分は、dockerfile でこれを cmd [ "ls", "-l" ] に変更すると、実際には

が出力されることです。 リーリー

dockerfile で entrypoint [ './hello-bin' ] に変更すると、バイナリも正常に実行されます。なぜ ./start.sh がないと表示されるのか理解できません。

更新: @larsks からインスピレーションを受けて、./start.sh のヘッダーを #!/bin/bash から # !/ に変更するとことに気づきました。 bin/sh と実行すると、魔法のように動作します。ここでの根本的な問題が何なのかまだ混乱しています。bash ヘッダーを保持したい場合は、docker ファイルをどのように修正すればよいでしょうか?

解決策

start.sh#!/bin/bashを使用したためにエラーが発生します。

Alpine Docker イメージには、デフォルトでは bash がインストールされていません。代わりに Busybox シェルを使用します。

#bash をコンテナにインストールできます。 Docker: Alpine ベースの Docker イメージで bash を使用する方法を参照してください。

または、質問のコメントに記載されているように、

#!/bin/bash#!/bin/sh に変更することもできます。

以上がファイルをコンテナにコピーした後、ファイルが見つからないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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