Làm cách nào để sử dụng hình ảnh cục bộ làm hình ảnh cơ sở với tệp dockerfile?


126

Tôi đang làm việc trên một tệp dockerfile. Tôi chỉ nhận ra rằng tôi đã sử dụng FROMvới các hình ảnh được lập chỉ mục.

Vì vậy, tôi tự hỏi:

  • Làm cách nào tôi có thể sử dụng một trong các hình ảnh cục bộ (tùy chỉnh) làm hình ảnh cơ sở ( FROM) mà không có pushingnó trong chỉ mục?

Câu trả lời:


148

Bạn có thể sử dụng nó mà không cần làm gì đặc biệt. Nếu bạn có một hình ảnh địa phương được gọi là blahbạn có thể làm FROM blah. Nếu bạn thực hiện FROM blahtrong Dockerfile của mình, nhưng không có hình ảnh cục bộ được gọi blah, thì Docker sẽ cố gắng lấy nó từ sổ đăng ký.

Nói cách khác, nếu Dockerfile có FROM ubuntu, nhưng bạn có một hình ảnh cục bộ được gọi là ubuntukhác với hình ảnh chính thức, hình ảnh của bạn sẽ ghi đè nó.


5
không hoạt động đối với tôi - có thể là vấn đề với boot2docker? Tôi có phiên bản mới nhất 1.3.1 ... Docker không xuất hiện để kiểm tra tại địa phương đầu tiên (hoặc có thể không báo cáo nó) nó đi thẳng vào cố gắng kéo từ registry stackoverflow.com/q/27046118/202168
Anentropic

@Anentropic Tôi đang sử dụng boot2docker 1.5. bash-4.3 $ docker hình ảnh BÁO CÁO TAG ẢNH ID ĐÃ TẠO KÍCH THƯỚC ẢNH Ubuntu1504gcc484 0378ea1c0b6c mới nhất 19 giờ trước 1.36 GB Và thực hiện "FROM ubuntu1504gcc484" trong Dockerfile khác của tôi, và điều này hoạt động tốt. (Xin lỗi vì định dạng kém)
Pejvan

Tôi không biết nữa, tôi bây giờ cũng trên 1,5
Anentropic

1
Tôi đã tạo một hình ảnh và gắn thẻ nó cho sổ đăng ký cục bộ của chúng tôi. Được gắn thẻ theo cách đó, nó không tìm thấy nó chỉ với tên và tên đầy đủ bao gồm sổ đăng ký, vì vậy nếu bạn tham chiếu theo cách đó, nó sẽ tìm nạp thẻ ở đó. Bạn có thể gắn thẻ nó lại với dạng đơn giản của tên và nó sẽ tìm thấy nó trước khi tìm đến sổ đăng ký. Đã làm cho tôi.
Gerry Gleason

1
Không, điều này không chính xác. Docker đang cố gắng kéo một hình ảnh từ sổ đăng ký từ xa mặc dù thực tế là tôi có một hình ảnh có cùng tên cục bộ, được liệt kê trong docker image list.
John Smith Tùy chọn

16

Đã xác minh: nó hoạt động tốt trong Docker 1.7.0.

BTW, không chỉ định --pull=truekhi chạy docker buildlệnh:

nếu bạn muốn sử dụng hình ảnh cục bộ làm hình ảnh cơ sở, vui lòng không có tùy chọn --pull=true, --pull=truesẽ luôn cố gắng lấy phiên bản mới hơn của hình ảnh.

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


4
Nếu hình ảnh của bạn có một -ký tự ( my-imageví dụ) trong tên thì docker của bạn sẽ không giải quyết cục bộ hình ảnh này, tôi không biết tại sao, dù sao để khắc phục nó chỉ đơn giản là không sử dụng -ký tự, đã thử nghiệm trên
docker

1
Tôi không gặp vấn đề gì với tên có dấu gạch nối trên Docker version 17.06.2-ce, build cec0b72, nhưng hãy đảm bảo rằng nếu bạn gắn thẻ hình ảnh của mình, bạn sẽ bao gồm thẻ này như một phần của đặc tả hình ảnh (FROM localimage: tag).
Scott

@deFreitas điều đó có vẻ đúng, tôi có một hình ảnh có dấu gạch ngang trong tên và Docker đang cố gắng kéo nó từ một sổ đăng ký từ xa mặc dù một hình ảnh có tên đó đã tồn tại cục bộ. Nếu quy tắc này về dấu gạch nối trong tên thành sự thật thì đây sẽ là sự điên rồ thuần túy.
John Smith Tùy chọn

@deFreitas: theo nhận xét cuối cùng của tôi, tôi đã thử với dấu gạch dưới của dấu gạch ngang và gặp vấn đề tương tự, docker đang cố gắng kéo hình ảnh từ xa mặc dù có hình ảnh cục bộ. Trong trường hợp của tôi, ít nhất các dấu gạch nối không phải là vấn đề.
John Smith Tùy chọn

4

Bạn có thể có - các ký tự trong hình ảnh của mình. Giả sử bạn có một hình ảnh cục bộ (không phải sổ đăng ký cục bộ) có tên centos-base-image với thẻ 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

Kết quả

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

Trong ví dụ trên FROMlà tìm nạp hình ảnh cục bộ của bạn, bạn có thể cung cấp hướng dẫn bổ sung để tìm nạp hình ảnh từ sổ đăng ký tùy chỉnh của mình (ví dụ FROM localhost:5000/my-image:with.tag:). Xem https://docs.docker.com/engine/reference/commandline/pull/#pull-from-a-dierence-registryhttps://docs.docker.com/registry/#tldr

Cuối cùng, nếu hình ảnh của bạn không được giải quyết khi cung cấp tên, hãy thử thêm thẻ vào hình ảnh khi bạn tạo nó

Chuỗi GitHub này mô tả vấn đề tương tự là không tìm thấy hình ảnh cục bộ theo tên .

Bằng cách bỏ qua một thẻ cụ thể, docker sẽ tìm kiếm một hình ảnh được gắn thẻ "mới nhất", vì vậy hãy tạo một hình ảnh có thẻ: mới nhất hoặc thay đổi FROM của bạn


0

Hãy nhớ đặt không chỉ thẻ mà còn cả kho lưu trữ thẻ đó, theo cách này:

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

Bạn nên tham khảo nó theo cách này:

elixir:1.7-centos7_3
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.