问题标签 [docker-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
637 浏览

python - 使用 Python 3 的 DockerHub API 身份验证

我正在使用 Python(3.6) 开发一个项目,在该项目中我需要实现 Docker Hub API 以在用户的​​ docker hub 帐户上创建一个存储库并推送他的 docker 映像。

真实场景:用户将提供他的源代码以及 Dockerfile、他的用户名和 docker cloud 的 apikey,然后我必须在他的帐户上创建一个存储库并为他的源代码构建一个 Docker 映像并推送到他的 docker hub 帐户。

这是我尝试过的:

如您所见,目前我正在将图像推送到我自己的默认/存储库,但我想在用户帐户上创建一个存储库,然后将图像推送到他自己的帐户。而且,我可以使用apikey而不是passwordinlogin()方法吗?

我怎样才能做到这一点?

请帮帮我!

谢谢你,阿卜杜勒

0 投票
1 回答
497 浏览

docker - Docker API 构建 Tar 文件路径

我正在尝试通过 API 构建 Docker 的映像。我在一个包含 Docker 文件和更多文件和文件夹的 TAR 文件中有我的上下文。

Dockerfile 有几个“COPY”命令,用于应该放置在容器中的文件和文件夹。但这不起作用,我不知道引用 TAR 中的这些文件是否正确,以便以后可以复制它们。

TAR 的结构大致是这样的:

  • 上下文.tar
    • Dockerfile
    • /代码
      • (许多 py 文件)
    • 入口点.sh
    • nginx.conf
    • 要求.txt
    • ...
    • ...

然后在 Dockerfile 中有一些这样的行:

复制 nginx.conf /etc/nginx/conf.d/

复制 ./代码 /api

这些副本是否正确?api将TAR解释为根路径?问题是它没有给出任何错误,也没有在日志中出现任何内容,只是最终图像在构建过程中留下了一半,我认为当它必须将文件从 tar 复制到容器时。

编辑1:

事实是它仍然不能很好地工作,但我注意到通过在运行中启动两次构建工作。第一次是三心二意,第二次成功正确地完成了流程。恐怕是某种BUG。

我做的另一件事是用 ADDS 替换 COPY,虽然我认为它基本上是一样的。

焦油文件:

TAR 文件内容

通过 api 构建请求:

[16:09:05.650][ApiProxy][Info] time="2018-07-17T16:09:05+02:00" msg="proxy << POST /build?t=test%3Alatest&nocache=1&dockerfile=Dockerfile\ n"

0 投票
1 回答
250 浏览

python - 使用 Docker Registry API 客户端在 Docker Hub 上创建私有存储库

我正在开发一个 Python 3.6 项目,在该项目中我需要使用 API 在 docker hub 帐户上创建一个存储库。我用谷歌搜索了很多,但找不到任何 API 客户端来在 docker hub 帐户上创建存储库。

dockercloud这里只找到了这个模块并以这种方式进行了尝试:

但它返回如下错误:

dockercloud.api.exceptions.AuthError:获取凭据时出错 - 错误:执行:“docker-credential-osxkeychain”:在 $PATH 中找不到可执行文件,输出:``

有什么方法可以使用 API 在 Docker Hub 上创建存储库?

0 投票
1 回答
1101 浏览

java - 从容器访问 docker API

我正在尝试构建一个可以控制 Docker for windows 上托管的 docker 容器的应用程序。

该应用程序构建在 docker-java 库之上,并且运行良好。

我试图在 docker 本身上托管这个应用程序。托管还可以。问题是,当应用程序尝试连接到 tcp://localhost:2375 以访问 docker 的 api 时,连接失败。

这显然是因为容器中的 localhost 不再是指安装 Docker for Windows 的实际主机。

于是我用显式IP地址从容器(tcp://192.168.0.10:2375)访问docker的api,连接也被拒绝了!

我停止了防火墙,但问题仍然存在。

我搜索了它,然后我意识到我必须定义“主机”配置变量才能使用主机的显式 IP 地址来访问 docker 的 api。但是当我尝试设置“hosts”配置变量时,docker说:“hosts”:Cannot be used in Docker for Windows

那么这是否意味着 Docker for Windows 上没有办法托管可以访问其 api 的容器呢?

0 投票
1 回答
455 浏览

python - Docker Python API 很慢

我开始在 python 中使用 Docker API 并遇到了时间执行问题。运行以下代码时,构建单个网络需要 15 秒。

2018-09-05 09:49:05,352 - 根 - 信息 - *** 创建网桥:

2018-09-05 09:49:05,352 nw_0

2018-09-05 09:49:20,420 nw_1

2018-09-05 09:49:35,503 nw_2

2018-09-05 09:49:50,557 nw_3

2018-09-05 09:50:05,616 nw_4

...

2018-09-05 09:53:51,693 nw_19

奇怪的是,当我使用以下命令直接在终端内运行相同的命令时:

docker network create nw_simu -d bridge --opt com.docker.network.bridge.enable_icc=true --opt com.docker.network.bridge.name=nw_1 --subnet=10.0.0.0/24 --ip-range= 10.0.0.0/24 --gateway=10.0.0.254

它立即运行。所以我的问题是:

你们中的一些人在使用这个 API 时是否有同样的问题?我可以做些什么来加快这个过程吗?(我已经在实现例程以便以并行方式运行它)

任何提示表示赞赏!

版本:Python 2.7.15rc1、Docker 18.06.1-ce、Ubuntu 18.04.1 LTS

0 投票
1 回答
284 浏览

docker - 通过使用 docker api 创建服务(群模式)将 2 个 docker 容器链接在一起

我正在使用 docker api 创建容器、网络、服务等,但我的要求是我希望面向公众的容器与在同一网络上运行的另一个容器进行通信。为此,我可以使用容器名称作为主机名以及我尝试连接非公共容器的端口。

我无法通过任何与服务相关的 api 找到容器的名称。我绝对可以使用 docker-compose 的链接功能,但我正试图通过 API 来做到这一点。谁能帮我这个?

0 投票
1 回答
72 浏览

docker - 如何使用 docker go-lang API 的 TaskLogs 端点?

我的实际问题是,如何获得特定版本的 go-lang docker 客户端?我能找到的最新版本是一年或更早的 v17.03.2-ce。我想使用具有 TaskLogs 的 docker 1.37。但是找不到具有此特定版本的。如果我选择 master 分支,这会给我 v1.39,但我安装的 docker 客户端 API 是 v1.38,它会抛出错误“来自守护进程的错误响应:客户端版本 1.39 太新。支持的最大 API 版本是 1.38”。

为什么我需要 v1.37?我使用的是 v1.13.1,它工作正常。现在我需要实现 TaskLogs 抓取器,这在 v1.13.1 中不可用。

0 投票
1 回答
821 浏览

docker - 导出的 golang 变量中说明的正在运行的 docker 容器的最新列表

我正在尝试使用 Docker 的 Golang SDK 来维护一个切片变量,其中包含当前在本地 Docker 实例上运行的容器。这个切片是从一个包中导出的,我想用它来提供一个网页。

我真的不习惯 goroutine 和通道,这就是为什么我想知道我是否找到了解决问题的好方法。

我有一个docker包如下。

https://play.golang.org/p/eMmqkMezXZn

它有一个Running变量,其中包含正在运行的容器的当前状态。

我使用一个reload函数将正在运行的容器加载到Running变量中。

然后我从init函数中启动一个 goroutine 来监听 Docker 事件并相应地触发reload函数。

我的问题是,从 goroutine 内部更新变量是否合适(就同步而言)?也许有一种更清洁的方式来实现我想要构建的东西?

更新

我在这里关心的并不是缓存。更多的是从 Docker SDK 中隐藏监听和更新过程的“复杂性”。我想提供类似索引的东西,让最终用户轻松循环并显示当前正在运行的容器。

我知道线程程序中的数据竞争问题,但我没有意识到我实际上是在并发上下文中(我以前从未在 Go 中编写过并发程序)。

我实际上需要重新考虑解决方案以使其更加惯用。据我所知,我有两个选择:要么用互斥锁保护变量,要么重新考虑设计以集成通道。

对我来说最重要的是隐藏或封装所使用的同步方法,这样包用户就不必担心共享状态是如何受到保护的。

你有什么建议吗?

非常感谢你的帮助,洛瑞克

0 投票
0 回答
52 浏览

kubernetes - 在 kubernetes 中运行时,docker api 未显示 memoryReservation 值

在 kubernetes 中启动容器时,我已经指定了内存限制和请求。

当我执行“kubernetes 描述节点”时,我能够看到限制,

但是当我做 docker 检查时,我只能看到“内存限制”值,而不是“内存预留”。

内存预留值在 docker-api 中显示为 0。

0 投票
1 回答
256 浏览

node.js - node.js 对 docker api 的请求总是给出错误 400

当我尝试连接到 docker api 时,总是收到错误 400。当我用 curl 尝试它时,我得到了回应。