我正在开发一个Go脚本,Docker API用于我的项目目的.在我登录到我的存储库后,我拉出了我想要的Docker镜像,但问题是ImagePull函数返回了一个io.ReadCloser实例,我只能通过以下方式传递给系统输出:
io.Copy(os.Stdout, pullResp)
Run Code Online (Sandbox Code Playgroud)
我可以看到响应很酷,但我找不到一个合适的方法来解析它并根据它来实现逻辑,如果已经下载了新版本的图像,它会做一些事情,如果是图像是最新的.
如果你曾经遇到过这个问题,我会很高兴你分享你的经验.
我刚刚启动了 Docker Api 并探索了各个部分。但是我一直坚持使用 python 客户端使用 docker api 构建图像,实际上我无法理解如何为 docker client.images.build()方法设置各种所需的参数?
请帮帮我!提前致谢!
与我合作的外部组织允许我访问私有(受身份验证令牌保护的)docker 注册表,最终我希望能够使用 docker 的 HTTP API V2 查询此注册表,以便获取所有注册表中可用的存储库和/或图像。
但在我这样做之前,我首先想获得一些在公共注册表(如Docker Hub )上构建这些类型的 API 查询的基本实践。因此,我继续在 Docker Hub 上使用用户名和密码注册了自己,并查阅了 API V2 文档,其中指出可以请求进行API 版本检查,如下所示:
GET /v2/
Run Code Online (Sandbox Code Playgroud)
或请求存储库列表为:
GET /v2/_catalog
Run Code Online (Sandbox Code Playgroud)
使用 curl 以及我用于注册 Docker Hub 帐户的用户名和密码,我尝试在命令行构造一个 GET 请求:
stachyra> curl -u stachyra:<my_password> -X GET https://index.docker.io/v2/
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}
stachyra> curl -u stachyra:<my_password> -X GET https://index.docker.io/v2/_catalog
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}
Run Code Online (Sandbox Code Playgroud)
当然,<my_password>我用我的实际帐户密码代替了 。
我一直期望从这个查询中得到的响应是一条巨大的 json 消息,列出了数千个存储库名称,但 API 似乎拒绝了我的 Docker Hub 凭据。
问题 1:我什至有index.docker.iodocker hub 注册表的正确 URL ( …
在docker容器列表中,您可以获得容器大小SizeRootFs和SizeRw,但我找不到大小的确切含义.
我一直在尝试从 Node.js 应用程序调用 docker,为此我使用了 npm 模块文档https://github.com/AgustinCB/docker-api中所述的 node-docker-api 。为了测试我是否能够从 Node.js 与 docker 交互,我正在运行文档中作为示例给出的一个小示例应用程序。但我收到错误为{ Error: connect ENOENT /var/run/docker.sock。完整的错误信息如下所示
dockerOperations.js:
'use strict';
const {Docker} = require('node-docker-api');
var Q = require('q');
var service = {}
service.runDockerCommand = runDockerCommand;
function runDockerCommand() {
console.log('inside runDockerCommand');
var deferred = Q.defer();
const docker = new Docker({ socketPath: '/var/run/docker.sock' });
console.log(docker);
docker.container.create({
Image: 'ubuntu',
name: 'test'
})
.then(container => container.start())
.then(container => container.stop())
.then(container => container.restart())
.then(container => container.delete({ force: true }))
.catch(error => console.log(error)); …Run Code Online (Sandbox Code Playgroud) 我docker-compose用来创建一个容器相互关联的"公园".没有什么特别的,我有API /前端/后端等..有我的docker-compose.yml:
version: "2"
services:
api:
build: ./deimos_api/docker
ports:
- "39999:80"
volumes:
- ./deimos_api:/root/deimos_api
asset:
build: ./deimos_asset/docker
ports:
- "8000:80"
volumes:
- ./deimos_asset:/root/deimos_asset
depends_on:
- api
links:
- api
data-manager:
build: ./deimos_data_manager/docker
ports:
- "3333:3333"
volumes:
- ./deimos_data_manager:/root/deimos_data_manager
depends_on:
- api
links:
- api
backend:
build: ./deimos_backend/docker
ports:
- "1080:80"
volumes:
- ./deimos_backend:/root/deimos_backend
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- api
- asset
links:
- api
Run Code Online (Sandbox Code Playgroud)
我刚学会在新网络上创建一个像这个链接容器一样的"公园".docker network ls结果:
NETWORK ID NAME DRIVER
448daa341d56 bridge bridge
c7feeeb44cd0 …Run Code Online (Sandbox Code Playgroud) Run Code Online (Sandbox Code Playgroud)docker version: 1.11.2 curl version: 7.50.3 (x86_64-pc-linux-gnu) libcurl/7.50.3 OpenSSL/1.0.1e zlib/1.2.7
/usr/local/sbin/bin/curl --unix-socket /var/run/docker.sock http://images/json -v
* Trying /var/run/docker.sock...
* Connected to images (/var/run/docker.sock) port 80 (#0)
> GET /json HTTP/1.1
> Host: images
> User-Agent: curl/7.50.3
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Content-Type: text/plain; charset=utf-8
< X-Content-Type-Options: nosniff
< Date: Thu, 22 Sep 2016 06:11:52 GMT
< Content-Length: 19
<
404 page not found
* Curl_http_done: called premature == 0
* Connection #0 to host images …Run Code Online (Sandbox Code Playgroud) 根据https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/list-tasks,过滤器只能用于获取具有特定服务名称的正在运行的容器。由于某种原因,我得到了所有任务的完整列表,无论其名称或所需状态如何。我找不到任何使用带有 Docker API 的 JSON 请求的正确示例。我正在使用以下命令:
A)
curl -X GET -H "Content-Type: application/json" -d '{"filters":[{ "service":"demo", "desired-state":"running" }]}' https://HOSTNAME:2376/tasks --cert ~/.docker/cert.pem --key ~/.docker/key.pem --cacert ~/.docker/ca.pem
Run Code Online (Sandbox Code Playgroud)
返回所有内容
B) 试图从Docker Remote API Filter Exited中获取一些工作
curl https://HOSTNAME:2376/containers/json?all=1&filters={%22status%22:[%22exited%22]} --cert ~/.docker/cert.pem --key ~/.docker/key.pem --cacert ~/.docker/ca.pem
Run Code Online (Sandbox Code Playgroud)
这个返回“curl:(60)无法识别对等方的证书颁发者。”,所以我猜测curl请求格式错误。
我在 Docker 论坛上询问过,他们提供了一些帮助。我很惊讶互联网上没有任何关于如何将 Docker API 与curl 一起使用的正确文档,或者它是如此明显而我不明白什么?
在使用Ubuntu 14.04并使用Upstart作为init系统的旧机器上,我通过定义DOCKER_OPTSon 启用了HTTP API /etc/default/docker.有用.
$ docker version
Client:
Version: 1.11.2
(...)
Server:
Version: 1.11.2
(...)
Run Code Online (Sandbox Code Playgroud)
这个解决方案在最近使用带有SystemD的Ubuntu 16.04的机器上不起作用.
如最近安装的文件顶部所述/etc/default/docker:
# Docker Upstart and SysVinit configuration file
#
# THIS FILE DOES NOT APPLY TO SYSTEMD
#
# Please see the documentation for "systemd drop-ins":
# https://docs.docker.com/engine/articles/systemd/
#
(...)
Run Code Online (Sandbox Code Playgroud)
当我在SystemD 的Docker文档页面上检查这些信息时,我需要填写一个daemon.json文件,但正如参考文献中所述,有一些属性不言自明,但其他属性可能不足以解释.
话虽这么说,我正在寻求帮助来转换这个:
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -G myuser --debug"
到daemon.json对象?
PS1:我知道daemon.json有一个debug: …
在ubuntu上,我可以进入/etc/init/docker.conf并DOCKER_OPTS='-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock'输入以在我的浏览器上显示json数据,但我如何为Centos执行此操作?
我已经尝试在文件中创建文件/etc/sysconfig/docker并放置other_args="-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock"在文件内并重新启动docker但它没有做任何事情.
使用 Docker 远程 API 时,我不断收到 CORS 错误。
正如 Docker 文档提到的,我确实设置了标志:
"api-cors-header" : "*",
Run Code Online (Sandbox Code Playgroud)
我仍然没有看到Access-Control-Allow-Origin: *响应标头上设置的标头。
我正在使用 Docker 1.13 实验性的。
这是我的 API 版本:
{
"Version": "1.13.0-rc3",
"ApiVersion": "1.25",
"MinAPIVersion": "1.12",
"GitCommit": "4d92237",
"GoVersion": "go1.7.3",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.8.12-moby",
"Experimental": true,
"BuildTime": "2016-12-06T01:15:44.725283878+00:00"
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
如果DOCKER_TLS_VERIFY,DOCKER_HOST并且DOCKER_CERT_PATH没有在Ubuntu上设置,我自己导出变量的默认值是什么(我不使用Docker Machine)?
ps aux | grep "docker daemon"
Run Code Online (Sandbox Code Playgroud)
返回:
root 1828 2.4 0.5 764036 44804 ? Ssl 21:32 0:01 /usr/bin/docker daemon --raw-logs
alexzei+ 6557 0.0 0.0 15948 2268 pts/15 S+ 21:33 0:00 grep --color=auto docker daemon
Run Code Online (Sandbox Code Playgroud) docker-api ×13
docker ×12
json ×2
centos7 ×1
cors ×1
curl ×1
dockerhub ×1
go ×1
java ×1
javascript ×1
node.js ×1
python-3.x ×1
rest ×1
systemd ×1
ubuntu ×1