Bagaimana saya bisa menggunakan gambar lokal sebagai gambar dasar dengan sebuah file dok?

126

Saya sedang mengerjakan file galangan kapal. Saya baru menyadari bahwa saya telah menggunakan FROMgambar yang diindeks selama ini.

Jadi saya bertanya-tanya:

  • Bagaimana saya bisa menggunakan salah satu gambar lokal (kustom) saya sebagai gambar dasar ( FROM) saya tanpa pushingitu ke indeks?
Phil
sumber

Jawaban:

148

Anda dapat menggunakannya tanpa melakukan sesuatu yang istimewa. Jika Anda memiliki citra lokal yang disebut blahAnda dapat melakukannya FROM blah. Jika Anda melakukannya FROM blahdi Dockerfile Anda, tetapi tidak memiliki image lokal yang dipanggil blah, maka Docker akan mencoba menariknya dari registri.

Dengan kata lain, jika Dockerfile memilikinya FROM ubuntu, tetapi Anda memiliki image lokal yang disebut ubuntuberbeda dari yang resmi, image Anda akan menimpanya.

jpetazzo.dll
sumber
5
tidak bekerja untuk saya - mungkinkah ada masalah dengan boot2docker? Saya memiliki versi terbaru 1.3.1 ... Docker tampaknya tidak memeriksa secara lokal terlebih dahulu (atau mungkin tidak melaporkannya) langsung mencoba menarik dari registri stackoverflow.com/q/27046118/202168
Anentropic
@ Anentropic Saya menggunakan boot2docker 1.5. bash-4.3 $ docker images TAG REPOSITORY ID GAMBAR DIBUAT UKURAN VIRTUAL ubuntu1504gcc484 terbaru 0378ea1c0b6c 19 jam yang lalu 1.36 GB Dan melakukan "DARI ubuntu1504gcc484" di Dockerfile saya yang lain, dan ini berfungsi dengan baik. (Apologies for the poor formatting)
Pejvan
Saya tidak tahu lagi, saya juga sekarang berada di 1,5
Anentropic
1
Saya membuat gambar dan menandainya untuk registri lokal kami. Ditandai seperti itu, ia tidak menemukannya hanya dengan nama, dan nama lengkapnya menyertakan registri, jadi jika Anda merujuk ke sana, ia akan mengambil tag di sana. Anda dapat menandainya lagi dengan bentuk nama yang sederhana dan ia akan menemukannya sebelum melihat ke registri. Bekerja untuk saya.
Gerry Gleason
1
Tidak, ini salah. Docker mencoba menarik gambar dari registri jarak jauh meskipun saya memiliki gambar dengan nama yang sama secara lokal, terdaftar di docker image list.
John Smith Opsional
16

Terverifikasi: berfungsi dengan baik di Docker 1.7.0.

BTW, jangan tentukan --pull=truesaat menjalankan docker buildperintah:

jika Anda ingin menggunakan gambar lokal sebagai gambar dasar, silakan tanpa opsi --pull=true, --pull=trueakan selalu mencoba untuk menarik versi gambar yang lebih baru.

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

Dmitriusan
sumber
4
Jika gambar Anda memiliki -karakter ( my-imagemisalnya) dalam nama maka buruh pelabuhan Anda tidak akan menyelesaikan gambar ini secara lokal, saya tidak tahu mengapa, bagaimanapun untuk memperbaikinya cukup tidak menggunakan -karakter, diuji pada docker-compose 1.8 dan docker 1.11
deFreitas
1
Saya tidak punya masalah dengan nama yang diberi tanda hubung Docker version 17.06.2-ce, build cec0b72, tapi pastikan jika Anda menandai gambar Anda, Anda menyertakan tag sebagai bagian dari spesifikasi gambar (FROM localimage: tag).
Scott
@deFreitas yang tampaknya benar, saya memiliki gambar dengan tanda hubung dalam nama dan Docker mencoba menariknya dari registri jarak jauh meskipun gambar dengan nama itu ada secara lokal. Jika aturan tentang tanda hubung pada nama ini ternyata benar, ini akan menjadi kegilaan murni.
John Smith Opsional
@deFreitas: mengikuti komentar terakhir saya, saya mencoba dengan garis bawah sebagai tanda hubung dan mendapatkan masalah yang sama, buruh pelabuhan mencoba menarik gambar dari jarak jauh meskipun ada gambar lokal. Dalam kasus saya, setidaknya tanda hubung bukanlah masalahnya.
John Smith Opsional
4

Anda dapat memiliki - karakter di gambar Anda. Asumsikan Anda memiliki gambar lokal (bukan registri lokal) bernama centos-base-image dengan tag 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

Hasil

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

Pada contoh di atas FROMadalah mengambil gambar lokal Anda, Anda dapat memberikan petunjuk tambahan untuk mengambil gambar dari registri kustom Anda (misalnya FROM localhost:5000/my-image:with.tag). Lihat https://docs.docker.com/engine/reference/commandline/pull/#pull-from-a-different-registry dan https://docs.docker.com/registry/#tldr

Terakhir, jika gambar Anda tidak terselesaikan saat memberikan nama, coba tambahkan tag ke gambar saat Anda membuatnya

Rangkaian GitHub ini menjelaskan masalah yang sama, yaitu tidak menemukan gambar lokal berdasarkan nama .

Dengan menghilangkan tag tertentu, pekerja galangan akan mencari gambar yang diberi tag "terbaru", jadi buatlah gambar dengan tag terbaru, atau ubah FROM Anda

steven87vt.dll
sumber
0

Ingatlah untuk meletakkan tidak hanya tag tetapi juga repositori di mana tag itu berada, dengan cara ini:

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

Anda harus merujuknya seperti ini:

elixir:1.7-centos7_3
Rowinson Gallego
sumber