Inhaltsverzeichnis
Frageninhalt
解决方法
Heim Backend-Entwicklung Golang Warum kann die Datei nach dem Kopieren in den Container nicht gefunden werden?

Warum kann die Datei nach dem Kopieren in den Container nicht gefunden werden?

Feb 09, 2024 am 08:24 AM
overflow

Warum kann die Datei nach dem Kopieren in den Container nicht gefunden werden?

php-Editor Yuzai kann bei der Verwendung der Container-Technologie auf ein häufiges Problem stoßen: Dateien können nach dem Kopieren in den Container nicht gefunden werden. Dieses Problem tritt normalerweise bei der Verwendung von Containerisierungsplattformen wie Docker auf. Der Grund kann sein, dass der Dateipfad falsch eingestellt ist oder das Dateisystem im Container nicht mit dem Host übereinstimmt. Es gibt viele Möglichkeiten, dieses Problem zu lösen, z. B. die Verwendung absoluter Pfade oder das Kopieren von Dateien in den Container über einen freigegebenen Ordner. Bevor wir dieses Problem lösen können, müssen wir zunächst die Zuordnungsbeziehung zwischen dem Dateisystem des Containers und dem Dateipfad verstehen und wissen, wie der Dateipfad richtig konfiguriert wird.

Frageninhalt

Ich habe eine Docker-Datei wie unten gezeigt:

from golang:1.19 as builder
workdir /app
copy . .
run cgo_enabled=0 go build -v -o "hello-bin"


#from scratch
from alpine
copy --from=builder /app/hello-bin /app/hello-bin
copy --from=builder /app/start.sh /app/start.sh
workdir /app
entrypoint  [ "./start.sh" ]
Nach dem Login kopieren

Es erstellt einfach eine Binärdatei aus der Hello-World-Go-Datei. Wenn ich jedoch versuche, diesen Container mit den folgenden Docker-Compose-Einstellungen auszuführen, wird exec ./start.sh: no such file or directory angezeigt.

version: "3"

services:
  hello:
    restart: always
    build:
      context: .
      dockerfile: dockerfile
Nach dem Login kopieren

Die Verzeichnisstruktur ist

❯ tree .
.
├── dockerfile
├── docker-compose.yaml
├── go.mod
├── hello
├── init.go
└── start.sh
Nach dem Login kopieren

Deshalb wird start.sh 应通过 copy 加载到 <code>builder 容器中。 . 行也是如此,它应该通过 copy --from=builder /app/start.sh /app/start.sh in den zweiten Behälter weitergeleitet.

Kontext, der Inhalt von start.sh ist wie folgt:

#!/bin/bash

_main() {
  echo "start"
}

_main "$@"
Nach dem Login kopieren

Das Verwirrendste für mich ist, dass, wenn ich es in der Docker-Datei in cmd [ "ls", "-l" ] ändere, es tatsächlich gedruckt wird

awesomeproject3-hello-1  | -rwxr-xr-x    1 root     root       1819562 May 19 02:41 hello-bin
awesomeproject3-hello-1  | -rwxrwxrwx    1 root     root            51 May 19 02:39 start.sh
Nach dem Login kopieren

Wenn ich es in der Docker-Datei in entrypoint [ './hello-bin' ] ,二进制文件也会成功运行。我只是不明白为什么它说没有 ./start.sh ändere.

Update: Inspiriert von @larsks ist mir aufgefallen, dass es wie von Zauberhand funktioniert, wenn ich den Header von ./start.sh von ./start.sh 的标头从 #!/bin/bash 更改为 #!/bin/sh,它会神奇地工作。我仍然很困惑这里的根本问题是什么,如果我想保留 bash 标头,我应该如何修复 docker 文件?

解决方法

发生错误是因为您在 start.sh 中使用了 #!/bin/bash ändere. Ich bin immer noch verwirrt, was hier das zugrunde liegende Problem ist. Wie soll ich die Docker-Datei reparieren, wenn ich die Bash-Header beibehalten möchte?

LösungDer Fehler ist aufgetreten, weil Sie #!/bin/bash in

verwendet haben.

bashAuf dem Alpine-Docker-Image ist Bash standardmäßig nicht installiert. Stattdessen wird die Busybox-Shell verwendet.

Sie können #!/bin/bash 更改为 #!/bin/sh in einem Container installieren. Siehe

Docker: Wie verwende ich Bash mit einem Alpine-basierten Docker-Image? 🎜🎜 🎜Oder Sie können es durch 🎜 ersetzen, wie Sie im Fragekommentar erwähnt haben. 🎜

Das obige ist der detaillierte Inhalt vonWarum kann die Datei nach dem Kopieren in den Container nicht gefunden werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ist die H5-Seitenproduktion eine Front-End-Entwicklung? Ist die H5-Seitenproduktion eine Front-End-Entwicklung? Apr 05, 2025 pm 11:42 PM

Ja, die H5-Seitenproduktion ist eine wichtige Implementierungsmethode für die Front-End-Entwicklung, die Kerntechnologien wie HTML, CSS und JavaScript umfasst. Entwickler bauen dynamische und leistungsstarke H5 -Seiten auf, indem sie diese Technologien geschickt kombinieren, z. B. die Verwendung der & lt; canvas & gt; Tag, um Grafiken zu zeichnen oder JavaScript zu verwenden, um das Interaktionsverhalten zu steuern.

Wie kann man das Größensymbol durch CSS anpassen und es mit der Hintergrundfarbe einheitlich machen? Wie kann man das Größensymbol durch CSS anpassen und es mit der Hintergrundfarbe einheitlich machen? Apr 05, 2025 pm 02:30 PM

Die Methode zur Anpassung der Größe der Größe der Größe der Größe in CSS ist mit Hintergrundfarben einheitlich. In der täglichen Entwicklung begegnen wir häufig Situationen, in denen wir die Details der Benutzeroberfläche wie Anpassung anpassen müssen ...

Warum sind die Inline-Block-Elemente falsch ausgerichtet? Wie löst ich dieses Problem? Warum sind die Inline-Block-Elemente falsch ausgerichtet? Wie löst ich dieses Problem? Apr 04, 2025 pm 10:39 PM

In Bezug auf die Gründe und Lösungen für falsch ausgerichtete Darstellung von Inline-Block-Elementen. Beim Schreiben von Webseitenlayout stoßen wir oft auf einige scheinbar seltsame Anzeigenprobleme. Vergleichen...

Der jüngste Preis für Bitcoin in den Jahren 2018-2024 USD Der jüngste Preis für Bitcoin in den Jahren 2018-2024 USD Feb 15, 2025 pm 07:12 PM

Echtzeit-Bitcoin-USD-Preis Faktoren, die den Bitcoin -Preis beeinflussen Indikatoren für die Vorhersage zukünftiger Bitcoin -Preise Hier finden Sie einige wichtige Informationen zum Preis von Bitcoin in den Jahren 2018-2024:

Wie steuern Sie die obere und das Ende der Seiten in den Browser -Druckeinstellungen über JavaScript oder CSS? Wie steuern Sie die obere und das Ende der Seiten in den Browser -Druckeinstellungen über JavaScript oder CSS? Apr 05, 2025 pm 10:39 PM

So verwenden Sie JavaScript oder CSS, um die obere und das Ende der Seite in den Druckeinstellungen des Browsers zu steuern. In den Druckeinstellungen des Browsers gibt es eine Option, um zu steuern, ob das Display ist ...

Wie verwendet ich das Clip-Pfad-Attribut von CSS, um den 45-Grad-Kurveneffekt des Segmenters zu erreichen? Wie verwendet ich das Clip-Pfad-Attribut von CSS, um den 45-Grad-Kurveneffekt des Segmenters zu erreichen? Apr 04, 2025 pm 11:45 PM

Wie kann man den 45-Grad-Kurveneffekt des Segmenters erreichen? Bei der Implementierung des Segmenters verwandeln Sie den rechten Rand in eine 45-Grad-Kurve, wenn Sie auf die linke Schaltfläche klicken, und der Punkt ...

Wie kann man Segmentierungseffekt mit einer 45 -Grad -Kurvenrandung erreichen? Wie kann man Segmentierungseffekt mit einer 45 -Grad -Kurvenrandung erreichen? Apr 04, 2025 pm 11:48 PM

Tipps zur Implementierung von Segmentierereffekten im Design der Benutzeroberfläche sind Segmentierer ein gemeinsames Navigationselement, insbesondere in mobilen Anwendungen und reaktionsschnellen Webseiten. ...

Der Text unter Flex -Layout wird weggelassen, aber der Behälter wird geöffnet? Wie löst ich es? Der Text unter Flex -Layout wird weggelassen, aber der Behälter wird geöffnet? Wie löst ich es? Apr 05, 2025 pm 11:00 PM

Das Problem der Containeröffnung aufgrund einer übermäßigen Auslassung von Text unter Flex -Layout und Lösungen werden verwendet ...

See all articles