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

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

王林
王林転載
2024-02-09 08:24:10570ブラウズ

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

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 までご連絡ください。