Jak mogę użyć obrazu lokalnego jako obrazu podstawowego z plikiem dockerfile?

127

Pracuję nad plikiem dockerfile. Właśnie zdałem sobie sprawę, że cały czas korzystałem FROMz indeksowanych obrazów.

Więc zastanawiam się:

  • Jak mogę użyć jednego z moich lokalnych (niestandardowych) obrazów jako obrazu podstawowego ( FROM) bez pushingniego w indeksie?
Phil
źródło

Odpowiedzi:

149

Możesz go używać bez robienia niczego specjalnego. Jeśli masz lokalny obraz o nazwie, blahmożesz to zrobić FROM blah. Jeśli robisz FROM blahw swoim Dockerfile, ale nie ma obrazu lokalnego nazwie blah, następnie Docker postara się wyciągnąć go z rejestru.

Innymi słowy, jeśli plik Dockerfile ma FROM ubuntu, ale masz lokalny obraz o nazwie ubunturóżny od oficjalnego, Twój obraz zastąpi go.

jpetazzo
źródło
5
nie działa u mnie - czy może być problem z boot2dockerem? Mam najnowszą wersję 1.3.1 ... Docker nie wydaje się najpierw sprawdzać lokalnie (a może nie zgłasza tego), przechodzi prosto do próby ściągnięcia z rejestru stackoverflow.com/q/27046118/202168
Anentropic
@Anentropic Używam boot2docker 1.5. bash-4.3 $ docker images REPOZYTORIA TAG ID OBRAZU TWORZONO WIRTUALNY ROZMIAR ubuntu1504gcc484 najnowsze 0378ea1c0b6c 19 godzin temu 1,36 GB I robię „Z ubuntu1504gcc484” w moim innym pliku Dockerfile i to działa dobrze. (Przepraszamy za złe formatowanie)
Pejvan
Już nie wiem, jestem teraz również na 1.5
Anentropic
1
Utworzyłem obraz i oznaczyłem go dla naszego lokalnego rejestru. Oznaczony w ten sposób, nie znajduje go tylko z nazwą, a pełna nazwa zawiera rejestr, więc jeśli odniesiesz się w ten sposób, pobierze tam tag. Możesz oznaczyć go ponownie prostą formą nazwy, a znajdzie ją przed sprawdzeniem rejestru. Pracował dla mnie.
Gerry Gleason
1
Nie, to nieprawda. Docker próbuje pobrać obraz ze zdalnego rejestru, mimo że mam lokalnie obraz o tej samej nazwie, wymieniony w docker image list.
John Smith Opcjonalnie
16

Zweryfikowano: działa dobrze w Docker 1.7.0.

BTW, nie określaj --pull=truepodczas uruchamiania docker buildpolecenia:

jeśli chcesz korzystać z lokalnego obrazu jako obrazu bazowego, proszę bez opcji --pull=true, --pull=truezawsze będą próbować wyciągać nowszą wersję obrazu.

- https://github.com/docker/docker/issues/14943

Dmitriusan
źródło
4
Jeśli twój obraz ma -znak ( my-imagena przykład) w nazwie, twój docker nie rozwiąże tego obrazu lokalnie, nie wiem dlaczego, i tak go naprawić, po prostu nie używaj -znaku, testowane na docker-compose 1.8 i
docker
1
Nie miałem problemu z nazwą z łącznikiem Docker version 17.06.2-ce, build cec0b72, ale upewnij się, że jeśli otagowałeś swój obraz, dołączasz tag jako część specyfikacji obrazu (FROM localimage: tag).
Scott,
@deFreitas wydaje się być prawdą, mam obraz z myślnikami w nazwie, a Docker próbuje go pobrać ze zdalnego rejestru, mimo że obraz o tej nazwie istnieje lokalnie. Gdyby ta zasada dotycząca myślników w nazwie okazała się prawdą, byłoby to czyste szaleństwo.
John Smith Opcjonalnie
@deFreitas: podążając za moim ostatnim komentarzem, próbowałem z podkreśleniem inteadów myślników i otrzymałem ten sam problem, docker próbował wyciągnąć obraz z pilota pomimo lokalnego obrazu. W moim przypadku przynajmniej myślniki nie są problemem.
John Smith Opcjonalnie
4

Możesz mieć - postacie na swoich obrazach. Załóżmy, że masz lokalny obraz (nie lokalny rejestr) o nazwie centos-base-image z tagiem 7.3.1611.

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

Dockerfile

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

Wynik

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
...

W powyższym przykładzie FROMjest pobieranie obrazu lokalnego, możesz podać dodatkowe instrukcje pobierania obrazu z rejestru niestandardowego (np FROM localhost:5000/my-image:with.tag.). Zobacz https://docs.docker.com/engine/reference/commandline/pull/#pull-from-a-different-registry i https://docs.docker.com/registry/#tldr

Wreszcie, jeśli obraz nie jest rozwiązany podczas podawania nazwy, spróbuj dodać tag do obrazu podczas jego tworzenia

W tym wątku GitHub opisano podobny problem polegający na tym, że nie można znaleźć lokalnych obrazów według nazwy .

Pomijając określony tag, docker będzie szukał obrazu z tagiem „najnowszy”, więc albo utwórz obraz z tagiem: najnowsze lub zmień swój FROM

steven87vt
źródło
0

Pamiętaj, aby umieścić nie tylko tag, ale także repozytorium, w którym ten tag się znajduje, w ten sposób:

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

Powinieneś odwołać się do tego w ten sposób:

elixir:1.7-centos7_3
Rowinson Gallego
źródło