2017-02-03 100 views
0

我正在嘗試使用python docker API從docker主機上的文件創建docker鏡像。 客戶端運行在不同的主機上,所以我想避免將文件下載到客戶端,然後將其上傳到docker主機。此測試:是否可以使用docker API從docker主機上的文件創建映像?

​​

產生下一個輸出:6的ESXi主機上

{"status":"Downloading from http://%2Fdata%2Ffile.tar"} 
{"errorDetail":{"message":"parse http://%2Fdata%2Ffile.tar: invalid URL escape \"%2F\""},"error":"parse http://%2Fdata%2Ffile.tar: invalid URL escape \"%2F\""} 

{"status":"Downloading from file:///data/file.tar"} 
{"errorDetail":{"message":"Get file:///data/file.tar: unsupported protocol scheme \"file\""},"error":"Get file:///data/file.tar: unsupported protocol scheme \"file\""} 

泊塢守護1.13在Ubuntu 16.04 VM中運行。客戶端是在物理Windows 10主機上運行的docker python API 2.0.2。

回答

0

看着docker daemon code後,我發現,碼頭工人不支持本地文件那裏,總是期望從網址http響應。

所以我通過HTTP服務器在docker容器中發送文件併發送http url。

0

我還沒有與碼頭工人Python庫的工作,但我建議使用泊塢API,它提供了比做事的另一種方式更多的功能:

以下步驟將通過構建多克API的圖像。

樣品Dockerfile:

# cat Dockerfile 

FROM ubuntu:14.04 
RUN mkdir demo 
RUN apt-get update 
RUN apt-get -y install vim 

創建一個tar文件,其中包括您的Dockerfile。

# tar -cvf Dockerfile.tar.gz Dockerfile 

執行泊塢窗API構建的圖像

# curl -v -X POST -H "Content-Type:application/tar" --data-binary '@Dockerfile.tar.gz' http://127.0.0.1:5000/build?t=build_test 

* Hostname was NOT found in DNS cache 
* Trying 127.0.0.1... 
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0) 
> POST /build?t=build_test HTTP/1.1 
> User-Agent: curl/7.35.0 
> Host: 127.0.0.1:5000 
> Accept: */* 
> Content-Type:application/tar 
> Content-Length: 10240 
> Expect: 100-continue 
> 
< HTTP/1.1 100 Continue 
< HTTP/1.1 200 OK 
< Api-Version: 1.28 
< Content-Type: application/json 
< Docker-Experimental: false 
< Ostype: linux 
* Server Docker/17.04.0-ce (linux) is not blacklisted 
< Server: Docker/17.04.0-ce (linux) 
< Date: Mon, 01 May 2017 09:56:54 GMT 
< Transfer-Encoding: chunked 
< 
{"stream":"Step 1/4 : FROM ubuntu:14.04\n"} 
{"stream":" ---\u003e 302fa07d8117\n"} 
{"stream":"Step 2/4 : RUN mkdir demo\n"} 
{"stream":" ---\u003e Running in 5941f911099e\n"} 
{"stream":" ---\u003e bccbffdd776a\n"} 
{"stream":"Removing intermediate container 5941f911099e\n"} 
{"stream":"Step 3/4 : RUN apt-get update\n"} 
{"stream":" ---\u003e Running in 7aefd190a165\n"} 
{"stream":"Ign http://archive.ubuntu.com trusty InRelease\n"} 
{"stream":"Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]\n"} 
{"stream":"Get:2 http://archive.ubuntu.com trusty-security InRelease [65.9 kB]\n"} 
{"stream":"Get:3 http://archive.ubuntu.com trusty Release.gpg [933 B]\n"} 
{"stream":"Get:4 http://archive.ubuntu.com trusty Release [58.5 kB]\n"} 
{"stream":"Get:5 http://archive.ubuntu.com trusty-updates/main Sources [491 kB]\n"} 
{"stream":"Get:6 http://archive.ubuntu.com trusty-updates/restricted Sources [6467 B]\n"} 
{"stream":"Get:7 http://archive.ubuntu.com trusty-updates/universe Sources [226 kB]\n"} 

.......  

{"stream":"Fetched 22.5 MB in 1min 40s (224 kB/s)\nReading package lists..."} 
{"stream":"\n"} 
{"stream":" ---\u003e ff06741dea7e\n"} 
{"stream":"Removing intermediate container 7aefd190a165\n"} 
{"stream":"Step 4/4 : RUN apt-get -y install vim\n"} 
{"stream":" ---\u003e Running in e9ddad5a4695\n"} 
{"stream":"Reading package lists..."} 
{"stream":"\n"} 
{"stream":"Building dependency tree..."} 
{"stream":"\nReading state information...\n"} 
{"stream":"The following extra packages will be installed:\n libgpm2 libpython2.7 libpython2.7-minimal libpython2.7-stdlib vim-runtime\n"} 
{"stream":"Suggested packages:\n gpm ctags vim-doc vim-scripts\n"} 
{"stream":"The following NEW packages will be installed:\n libgpm2 libpython2.7 libpython2.7-minimal libpython2.7-stdlib vim\n vim-runtime\n"} 
{"stream":"0 upgraded, 6 newly installed, 0 to remove and 3 not upgraded.\nNeed to get 9074 kB of archives.\nAfter this operation, 42.9 MB of additional disk space will be used.\nGet:1 http://archive.ubuntu.com/ubuntu/ trusty/main libgpm2 amd64 1.20.4-6.1 [16.5 kB]\n"} 
....... 
{"stream":"Processing triggers for libc-bin (2.19-0ubuntu6.11) ...\n"} 
{"stream":" ---\u003e b1736dd9b698\n"} 
{"stream":"Removing intermediate container e9ddad5a4695\n"} 
{"stream":"Successfully built b1736dd9b698\n"} 
* Connection #0 to host 127.0.0.1 left intact 

檢查泊塢窗圖像的圖像構建成功後。

# docker images 
REPOSITORY      TAG     IMAGE ID   CREATED    SIZE 
build_test      latest    b1736dd9b698  8 seconds ago 

是指這樣的:

How to configure docker daemon port

+0

您誤解了問題。問題是如何避免從遠程服務器加載大文件並將其發回到docker守護進程(我正在使用遠程客戶端和文件駐留在docker守護進程主機上)。在查看docker守護進程代碼後,我知道這是不可能的,所以我現在通過http公開文件併發送http url。 – ISanych

相關問題