[英]How can I use a local image as the base image with a dockerfile?
我正在研究 dockerfile。我剛剛意識到我一直在使用FROM
和索引圖像。
所以我想知道:
pushing
送到索引的情況下使用我的本地(自定義)圖像之一作為我的基礎( FROM
)圖像?您可以使用它而無需做任何特別的事情。 如果您有一個名為blah
的本地圖像,您可以執行FROM blah
。 如果您在 Dockerfile 中執行FROM blah
,但沒有名為blah
的本地映像,則Docker 將嘗試從注冊表中提取它。
換句話說,如果一個 Dockerfile 確實是FROM ubuntu
,但你有一個名為ubuntu
的本地鏡像與官方鏡像不同,你的鏡像將覆蓋它。
已驗證:它在 Docker 1.7.0 中運行良好。
運行 docker docker build
命令時不要指定--pull=true
從這個線程上使用 FROM at dockerfile 參考本地構建的圖像:
如果你想使用本地鏡像作為基礎鏡像,不帶選項
--pull=true
傳遞
--pull=true
將始終嘗試拉取更新版本的圖像。
您可以在圖像中包含 - 字符。 假設您有一個名為 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 線程描述了一個類似的問題,即沒有按名稱查找本地圖像。
通過省略特定標簽,docker 將查找標記為“最新”的圖像,因此要么使用 :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
我必須在帶有 M1 的 Mac 上禁用BUILDKIT
才能使用本地圖像。 您可以通過將DOCKER_BUILDKIT
環境變量設置為 0 來實現。
DOCKER_BUILDKIT=0 docker build -t YOUR_TAG --pull=false.
對於使用 M1 芯片的用戶,當本地鏡像的平台不同與目標 Dockerfile 不同時,可能會出現問題。 就我而言,我已經構建了支持 M1 的基本映像,然后嘗試在使用平台linux/amd64
構建的映像中使用命令FROM
我們的/etc/docker/daemon.json
有一行聲明
"disable-legacy-registry" : true,
使用該行,本地注冊表拒絕訪問。
刪除它后,它就可以工作了。
我剛剛在引擎版本為 20.10.14 的 M1 Mac 上遇到了這個問題。 從 docker docker build --help
看並不明顯,但傳遞--pull=false
對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.