> 백엔드 개발 > Golang > Go에서 Docker 이미지를 빌드할 때 '지정된 Dockerfile을 찾을 수 없습니다' 오류를 수정하는 방법은 무엇입니까?

Go에서 Docker 이미지를 빌드할 때 '지정된 Dockerfile을 찾을 수 없습니다' 오류를 수정하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-15 19:21:10
원래의
236명이 탐색했습니다.

How to Fix

Go Code에서 Docker 이미지 빌드: Dockerfile 위치 오류 해결

Docker API 및 Docker Go 라이브러리를 사용하여 Docker 이미지를 구성하려고 할 때, 지정된 Dockerfile의 위치와 관련된 오류가 발생하는 것이 일반적입니다. "데몬의 오류 응답: 지정된 Dockerfile을 찾을 수 없습니다"라는 오류 메시지는 제공된 Dockerfile 경로가 잘못되었거나 Dockerfile을 찾을 수 없음을 나타냅니다.

해결책:

이 문제를 해결하려면 다음을 확인하세요.

  1. Dockerfile이 포함된 폴더가 빌드에 있는지 확인하세요. path.
  2. Dockerfile의 경로를 확인하세요. Dockerfile을 직접 가리키는 상대 또는 절대 경로를 사용하세요.
  3. Dockerfile 경로에서 소프트 링크 사용을 제거하세요.
  4. 표준 docker 빌드를 사용하여 Dockerfile을 빌드할 수 있는지 테스트하세요. 명령을 실행하세요.

위 단계를 모두 수행했는데도 오류가 지속되면 다음을 시도해 보세요. 접근 방식:

  1. tar 버퍼를 사용하여 Dockerfile 콘텐츠를 ImageBuild 함수에 제공합니다.
  2. Dockerfile의 tar 아카이브를 생성합니다.
  3. tar 아카이브를 다음과 같이 전달합니다. ImageBuildOptions 구조체의 Context 필드에 io.Reader를 추가합니다.
  4. Dockerfile의 이름을 ImageBuildOptions 구조체의 Dockerfile 필드.

예제 코드:

package main

import (
    "archive/tar"
    "bytes"
    "context"
    "io"
    "io/ioutil"
    "log"
    "os"

    "github.com/docker/docker/api/types"
    "github.com/docker/docker/client"
)

func main() {
    ctx := context.Background()
    cli, err := client.NewEnvClient()
    if err != nil {
        log.Fatal(err, " :unable to init client")
    }

    buf := new(bytes.Buffer)
    tw := tar.NewWriter(buf)
    defer tw.Close()

    dockerFile := "myDockerfile"
    dockerFileReader, err := os.Open("/path/to/dockerfile")
    if err != nil {
        log.Fatal(err, " :unable to open Dockerfile")
    }
    readDockerFile, err := ioutil.ReadAll(dockerFileReader)
    if err != nil {
        log.Fatal(err, " :unable to read dockerfile")
    }

    tarHeader := &tar.Header{
        Name: dockerFile,
        Size: int64(len(readDockerFile)),
    }
    err = tw.WriteHeader(tarHeader)
    if err != nil {
        log.Fatal(err, " :unable to write tar header")
    }
    _, err = tw.Write(readDockerFile)
    if err != nil {
        log.Fatal(err, " :unable to write tar body")
    }
    dockerFileTarReader := bytes.NewReader(buf.Bytes())

    imageBuildResponse, err := cli.ImageBuild(
        ctx,
        dockerFileTarReader,
        types.ImageBuildOptions{
            Context:    dockerFileTarReader,
            Dockerfile: dockerFile,
            Remove:     true})
    if err != nil {
        log.Fatal(err, " :unable to build docker image")
    }
    defer imageBuildResponse.Body.Close()
    _, err = io.Copy(os.Stdout, imageBuildResponse.Body)
    if err != nil {
        log.Fatal(err, " :unable to read image build response")
    }
}
로그인 후 복사

위 내용은 Go에서 Docker 이미지를 빌드할 때 '지정된 Dockerfile을 찾을 수 없습니다' 오류를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿