source

도커 파일로 로컬 이미지를 기본 이미지로 사용하려면 어떻게 해야 합니까?

manycodes 2023. 9. 13. 22:51
반응형

도커 파일로 로컬 이미지를 기본 이미지로 사용하려면 어떻게 해야 합니까?

도커 파일 작업 중입니다.지금 막 깨달았어요 제가 사용법을FROM전체적으로 색인화된 이미지를 가지고 있습니다.

그래서 궁금해요.

  • 로컬(사용자 지정) 이미지 중 하나를 기본 이미지로 사용하려면 어떻게 해야 합니까?FROM) 없는 이미지pushing그것을 지수로?

특별한 일을 하지 않아도 사용할 수 있습니다.로컬 이미지가 있는 경우blah할수있습니다FROM blah.네가 한다면.FROM blahDocker 파일에는 로컬 이미지가 없습니다.blah, 그러면 도커가 등록부에서 빼내려고 할 겁니다

즉, 만약 도커 파일이FROM ubuntu, 하지만 당신은 지역 이미지를 가지고 있습니다.ubuntu공식적인 것과는 다르게, 당신의 이미지는 그것을 무시할 것입니다.

미래에 이 문제에 직면한 사람들을 위해, 당신이 당신의 지역에 이미지를 가지고 있지만,docker build여전히 도커 허브에서 이미지를 가져오려고 합니다. 문제는 아키텍처 유형이 다르다는 것일 수 있습니다.

Trying to pull from docker.io even though image exists

이미지의 아키텍처를 확인할 수 있습니다.

docker inspect --format='{{.Os}}/{{.Architecture}}' IMAGE_NAME

이제 너의 안에Dockerfile바꾸다FROM IMAGE_NAME와 비슷한 정도로FROM --platform=linux/amd64 IMAGE_NAME그리고 도커는 이제 지역 이미지를 사용할 것입니다.

확인: 도커 1.7.0에서 잘 작동합니다.

지정 안 함--pull=true실행 시docker build지휘권을

도커 파일에서 FROM을 사용하여 로컬에서 작성된 참조 이미지의 이 스레드에서:

로컬 이미지를 기본 이미지로 사용하려면 옵션 없이 전달--pull=true
--pull=true는 항상 새로운 버전의 이미지를 끌어오기를 시도합니다.

나는 비활성화해야만 했습니다.BUILDKIT로컬 이미지를 사용할 수 있도록 M1이 있는 맥에서.당신은 그것을 할 수 있습니다.DOCKER_BUILDKIT환경 변수를 0으로 설정합니다.

DOCKER_BUILDKIT=0 docker build -t YOUR_TAG --pull=false .

이미지에 - 캐릭터를 가질 수 있습니다.태그 7.3.1611이 있는 centos-base-image(로컬 레지스트리가 아닌)라는 로컬 이미지가 있다고 가정합니다.

docker version 
      Client:
       Version:         1.12.6
       API version:     1.24
       Package version: docker-common-1.12.6-16.el7.centos.x86_64
       Go version:      go1.7.4

      Server:
       Version:         1.12.6
       API version:     1.24
       Package version: docker-common-1.12.6-16.el7.centos.x86_64
       Go version:      go1.7.4

docker images
 REPOSITORY            TAG
 centos-base-image     7.3.1611

도커파일

FROM centos-base-image:7.3.1611
RUN yum -y install epel-release libaio bc flex

결과

Sending build context to Docker daemon 315.9 MB
Step 1 : FROM centos-base-image:7.3.1611
  ---> c4d84e86782e
Step 2 : RUN yum -y install epel-release libaio bc flex
  ---> Running in 36d8abd0dad9
...

위의 예에서FROM로컬 이미지를 가져오는 중이므로 사용자 정의 레지스트리에서 이미지를 가져오는 추가 지침을 제공할 수 있습니다(예:FROM localhost:5000/my-image:with.tag). https://docs.docker.com/engine/reference/commandline/pull/ #http://from a different-situde 및 https://docs.docker.com/registry/ #http:////tml 참조

마지막으로, 이름을 제공할 때 이미지가 해결되지 않는 경우 이미지를 생성할 때 태그를 추가해 보십시오.

이 GitHub 스레드는 이름으로 로컬 이미지를 찾지 못하는 유사한 문제를 설명합니다.

특정 태그를 생략하면 도커가 "latest" 태그가 지정된 이미지를 찾으므로 :latest 태그로 이미지를 만들거나 FROM을 변경합니다.

태그뿐만 아니라 해당 태그가 있는 저장소도 다음과 같이 입력해야 합니다.

docker images
REPOSITORY                                TAG                       IMAGE ID            CREATED             SIZE
elixir                                    1.7-centos7_3             e15e6bf57262        20 hours ago        925MB

이렇게 참조해야 합니다.

elixir:1.7-centos7_3

이건 바보같은 해결책이지만...이미지에 이름이 있는 경우blah와 아이디b2d34289abae, 그러면 당신은 그것을 바꿀 수 있습니다.FROM에 줄을 서세요.

FROM blah

로.

FROM b2d34289abae

는 는 ID 을 는 을 docker images

하지만 현지 테스트 같은 경우에는 일시적인 해결책으로 취급하고 싶습니다.

M1 mac에서는 이미지 플랫폼과 name:tag를 모두 지정해야 했습니다.

FROM --platform=linux/amd64 myimagename:2.0.0.a

예.

  1. build가 플랫폼과 함께 경우 가 과 .
    docker build . --tag chrome-nodejs-java --platform=linux/amd64,
    에을야다 뒤에 .FROM
  2. 에 가 있는 경우docker images정름및가우는그음(그)우음정 )latest), 태그를 를 해야 해야 를 .

훨씬 더 간단한 방법은 IMAGE ID를 사용하는 것일 수 있습니다.

FROM c08a03a92df0

여하튼 사용docker images 자주 ㅜㅜ
이미지의 플랫폼은 나열하지 않습니다. 용도는그로로그rte로 docker inspect imagenameOrID
아니면docker inspect --format='{{.Os}}/{{.Architecture}}' imagenameOrID

에는 제 이미지 이름에 대해 ( 에 에 가 에는 가 에 ).latest, 태그 없이 구축됨)을 사용했지만 이미지 이름: 2.0.0.a에서 작동했습니다.

다른 말로 하자면, 만약docker images태그가 있는 이미지가 없습니다.latest, 그러면 사용할 수 없습니다.FROM 버전 태그 그이정이그tc전정n


@jpetazo, @Anuj Bansal, @SomeGuy의 높은 투표율에 감사드립니다.

OS 사용자의 MAC OS m1 를 하는 가 할 를 를 추가해야 했습니다.--platform=linux/amd64기본 이미지 앞에 매개 변수를 지정합니다.

FROM --platform=linux/amd64 baseImage:tag

M1 칩을 사용하는 사용자의 경우 로컬 이미지의 플랫폼이 타겟 도커 파일과 다를 경우 문제가 발생할 수 있습니다.경우으로 베이스 제 M1로본를한음다고를do다ne를음제는iehety,'eedmnmdt한FROM플랫폼을 사용해 만든 이미지에서.linux/amd64

방금 엔진 버전 20.10.14의 M1 맥에서 이것을 발견했습니다.그것은 명백하지 않았습니다.docker build --help 지나가다 보면, --pull=false나를 위해 일했습니다.

우리들의/etc/docker/daemon.json선언하는 대사가 있었습니다.

"disable-legacy-registry" : true,

그 전화를 걸었을 때, 지역 등록부는 접속을 거부하고 있었습니다.
제거하면 됩니다.

기본 이미지 플랫폼 유형을 가리키지 않았기 때문에 발생하는 최신 도커 버전의 경우 다음을 수행해야 합니다.

docker build --platform=${DESIRED_PLATFORM} -t ${TAG} .

언급URL : https://stackoverflow.com/questions/20481225/how-can-i-use-a-local-image-as-the-base-image-with-a-dockerfile

반응형