ฉันจะใช้อิมเมจในเครื่องเป็นอิมเมจพื้นฐานกับ Dockerfile ได้อย่างไร


126

ฉันกำลังทำงานกับ Dockerfile ฉันเพิ่งรู้ว่าฉันใช้FROMกับภาพที่จัดทำดัชนีมาตลอด

ดังนั้นฉันจึงสงสัยว่า:

  • ฉันจะใช้รูปภาพในเครื่อง (กำหนดเอง) ของฉันเป็นรูปฐาน ( FROM) โดยไม่มีpushingดัชนีได้อย่างไร

คำตอบ:


148

คุณสามารถใช้งานได้โดยไม่ต้องทำอะไรเป็นพิเศษ หากคุณมีภาพท้องถิ่นที่เรียกว่าคุณสามารถทำได้blah FROM blahถ้าคุณทำFROM blahใน Dockerfile ของคุณ แต่ไม่ได้มีภาพท้องถิ่นที่เรียกว่าblah, แล้วหางจะพยายามที่จะดึงมันออกจากรีจิสทรี

กล่าวอีกนัยหนึ่งคือหาก Dockerfile ทำFROM ubuntuแต่คุณมีภาพในเครื่องที่เรียกว่าubuntuแตกต่างจากภาพที่เป็นทางการภาพของคุณจะถูกแทนที่


5
ไม่ได้ผลสำหรับฉัน - อาจมีปัญหากับ boot2docker? ฉันมีเวอร์ชันล่าสุด 1.3.1 ... นักเทียบท่าไม่ได้ตรวจสอบในเครื่องก่อน (หรืออาจไม่รายงาน) มันตรงไปที่การพยายามดึงจากรีจิสตรี stackoverflow.com/q/27046118/202168
Anentropic

@Anentropic ฉันใช้ boot2docker 1.5 bash-4.3 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu1504gcc484 ล่าสุด 0378ea1c0b6c 19 ชั่วโมงที่ผ่านมา 1.36 GB และทำ "FROM ubuntu1504gcc484" ใน Dockerfile อื่นของฉันและมันก็ใช้ได้ดี (ขออภัยสำหรับรูปแบบที่ไม่ดี)
Pejvan

ฉันไม่รู้อะไรอีกตอนนี้ฉันอยู่ที่ 1.5
Anentropic

1
ฉันสร้างรูปภาพและติดแท็กสำหรับรีจิสตรีในพื้นที่ของเรา ติดแท็กด้วยวิธีนี้จะไม่พบเพียงชื่อและชื่อเต็มรวมถึงรีจิสทรีดังนั้นหากคุณอ้างอิงวิธีนั้นจะดึงแท็กไปที่นั่น คุณสามารถแท็กอีกครั้งด้วยรูปแบบง่ายๆของชื่อและจะพบก่อนที่จะมองหารีจิสทรี ทำงานให้ฉัน
Gerry Gleason

1
ไม่นี่ไม่ถูกต้อง นักเทียบท่าพยายามดึงภาพจากรีจิสตรีระยะไกลแม้ว่าฉันจะมีรูปภาพที่มีชื่อเดียวกันในเครื่องอยู่ในรายการdocker image list.
John Smith Optional

16

ตรวจสอบแล้ว: ทำงานได้ดีใน Docker 1.7.0

BTW ไม่ต้องระบุ--pull=trueเมื่อเรียกใช้docker buildคำสั่ง:

ถ้าคุณต้องการใช้ภาพในท้องถิ่นเป็นภาพฐานโปรดโดยไม่ต้องตัวเลือก--pull=true, --pull=trueมักจะพยายามที่จะดึงรุ่นใหม่ของภาพ

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


4
หากรูปภาพของคุณมี-อักขระ ( my-imageเช่น) ในชื่อนักเทียบท่าของคุณจะไม่แก้ไขภาพนี้ในเครื่องฉันไม่รู้ว่าทำไมต้องแก้ไขเพียงแค่ไม่ใช้-อักขระทดสอบกับนักเทียบท่า 1.8 และนักเทียบท่า 1.11
deFreitas

1
ฉันไม่มีปัญหากับการใช้ชื่อยัติภังค์Docker version 17.06.2-ce, build cec0b72แต่ตรวจสอบให้แน่ใจว่าคุณติดแท็กรูปภาพของคุณหรือไม่คุณรวมแท็กเป็นส่วนหนึ่งของข้อกำหนดรูปภาพ (จาก localimage: tag)
Scott

@deFreitas ที่ดูเหมือนจะจริงฉันมีรูปภาพที่มีขีดกลางในชื่อและ Docker พยายามดึงมันจากรีจิสตรีระยะไกลแม้ว่าจะมีรูปภาพที่มีชื่อนั้นอยู่ในเครื่องก็ตาม หากกฎเกี่ยวกับยัติภังค์ในชื่อนี้เป็นจริงนี่คงเป็นความบ้าคลั่งอย่างแท้จริง
John Smith Optional

@deFreitas: ตามความคิดเห็นล่าสุดของฉันฉันพยายามขีดเส้นใต้ขีดกลางของยัติภังค์และพบปัญหาเดียวกันนักเทียบท่าพยายามดึงภาพจากระยะไกลแม้จะมีภาพในเครื่อง ในกรณีของฉันอย่างน้อยยัติภังค์ก็ไม่ใช่ปัญหา
John Smith Optional

4

คุณสามารถมี - ตัวอักษรในภาพของคุณ สมมติว่าคุณมีอิมเมจในเครื่อง (ไม่ใช่โลคัลรีจิสตรี) ชื่อ centos-base-image พร้อมแท็ก 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

ผลลัพธ์

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/#pull-from-a-different-registryและhttps://docs.docker.com/registry/#tldr

สุดท้ายหากรูปภาพของคุณไม่ได้รับการแก้ไขเมื่อตั้งชื่อให้ลองเพิ่มแท็กให้กับรูปภาพเมื่อคุณสร้าง

นี้ด้าย GitHub อธิบายปัญหาของการไม่ได้หาภาพในท้องถิ่นโดยใช้ชื่อที่คล้ายกัน

นักเทียบท่าจะมองหารูปภาพที่ติดแท็ก "ล่าสุด" โดยการละเว้นแท็กดังนั้นให้สร้างรูปภาพด้วยแท็กล่าสุดหรือเปลี่ยนจาก FROM


0

อย่าลืมใส่ไม่เพียง แต่แท็กเท่านั้น แต่ยังรวมถึงที่เก็บที่แท็กนั้นอยู่ด้วยวิธีนี้:

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

คุณควรอ้างอิงด้วยวิธีนี้:

elixir:1.7-centos7_3
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.