用Docker Machine创建新机器后,我收到以下错误:
$ docker ps
Error response from daemon: client is newer than server(client API version 1.21, server API version: 1.19)
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
我在docker中遇到连接问题.我使用官方的mysql 5.7图像和Prisma服务器.当我通过prisma cli开始它时,使用docker compose
underneath(在这里描述)一切正常.
但我需要通过docker api以编程方式启动此容器,在这种情况下,应用程序中的连接将被删除[Note] Aborted connection 8 to db: 'unconnected' user: 'root' host: '164.20.10.2' (Got an error reading communication packets)
.
所以我做了什么:
创建桥接网络:
const network = await docker.network.create({
Name: manifest.name + '_network',
IPAM: {
"Driver": "default",
"Config": [
{
"Subnet": "164.20.0.0/16",
"IPRange": "164.20.10.0/24"
}
]
}});
Run Code Online (Sandbox Code Playgroud)创建mysql容器并将其附加到网络
const mysql = await docker.container.create({
Image: 'mysql:5.7',
Hostname: manifest.name + '-mysql',
Names: ['/' + manifest.name + '-mysql'],
NetworkingConfig: {
EndpointsConfig: {
[manifest.name + '_network']: …
Run Code Online (Sandbox Code Playgroud)我正在编写一个docker注册表api包装器,用于从一个私有注册表中提取图像并将它们推送到另一个私有注册表.
首先根据文档我需要拉出清单和图层image:tag
.在 Puling An Image之后,我已经成功下载了特定image:tag
和清单的所有图层.
下面推的图像,我遵循的步骤:
POST /v2/<name>/blobs/uploads/
(获取UUID即Location
标题)HEAD /v2/<name>/blobs/<digest>
(检查注册表中是否已存在)PUT /v2/<name>/blobs/uploads/<uuid>?digest=<digest>
(Monolithic Upload
)对我来说不清楚的是:
UUID
我推送的每个单独层是唯一的还是对所有层重用的(例如,我是否需要为每个层运行一个新的POST,UUID
然后在尝试上传之前获取新的?).要使上传被视为完成,客户端必须在上传端点上使用摘要参数提交PUT请求
但是,正如我所提到的,我正在使用单片上传,它使用的是PUT
与完成上传部分中显示的相同的请求.所以通过单片上传,我还可以同时完成上传吗?
问题
当我完成上述所有步骤时,我BLOB_UNKNOWN
在上传摘要时收到错误,例如
{"errors:"[{"code":"BLOB_UNKNOWN","message":"blob unknown to registry","detail":{"digest":}},...]}
根据文档,在推送清单时会产生此错误,并且清单中的其中一个层未知:
如果注册表未知一个或多个图层,则返回BLOB_UNKNOWN错误.错误响应的详细信息字段将具有标识丢失的blob的摘要字段.每个未知blob都会返回一个错误.响应格式如下:
令我困惑的是
现在我将使用docker客户端,但是我没有在线找到任何包装器示例,看看它是如何被拉出来的.据推测,我错过了一些逻辑或误解了文档,但我不确定我哪里出错了?
我想捕获 docker 事件并在发生某些情况时执行某些操作。有很多方法可以“获取/打印事件”:
# With curl
curl --unix-socket /var/run/docker.sock http:/v1.40/events
# With nc
echo -e "GET /events HTTP/1.0\r\n" | nc -U /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)
但是有没有办法连续监听并处理每一行/事件?例如:
while EVENT ?magic?; do
ACTION=$(echo $EVENT | jq .Action )
if [ $ACTION -eq "start" ]; then ....; fi
done
Run Code Online (Sandbox Code Playgroud)
解决方案
@Adiii 回答后,一个简短的解决方案:
#!/bin/bash
function handle {
# Check the line is a JSON line:
if [[ ${1:0:1} == "{" ]]; then
# ... You can do here anything ...
# Print: "LOG $line", "LOG" is green …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Docker API和Docker Go库(https://github.com/docker/engine-api/)构建Docker镜像.代码示例:
package main
import (
"fmt"
"github.com/docker/engine-api/client"
"github.com/docker/engine-api/types"
"golang.org/x/net/context"
)
func main() {
defaultHeaders := map[string]string{"User-Agent": "engine-api-cli-1.0"}
cli, err := client.NewClient("unix:///var/run/docker.sock", "v1.22", nil, defaultHeaders)
if err != nil {
panic(err)
}
fmt.Print(cli.ClientVersion())
opt := types.ImageBuildOptions{
CPUSetCPUs: "2",
CPUSetMems: "12",
CPUShares: 20,
CPUQuota: 10,
CPUPeriod: 30,
Memory: 256,
MemorySwap: 512,
ShmSize: 10,
CgroupParent: "cgroup_parent",
Dockerfile: "dockerSrc/docker-debug-container/Dockerfile",
}
_, err = cli.ImageBuild(context.Background(), nil, opt)
if err == nil || err.Error() != "Error response from daemon: Server error" { …
Run Code Online (Sandbox Code Playgroud) 我正在为Docker编写API客户端,并且注册表API难以使用。我正在尝试从注册表中删除图像,但是我一直收到此错误
[ { code: 'UNSUPPORTED', message: 'The operation is unsupported.' } ]
Run Code Online (Sandbox Code Playgroud)
我要做到这一点的步骤如下,
> GET http://localhost:5000/v2/
> registry/2.0
> registry/2.0
> GET http://localhost:5000/v2/_catalog/
> { repositories: [ 'alpine' ] }
> GET http://localhost:5000/v2/alpine/tags/list
> { name: 'alpine', tags: [ 'latest' ] }
> HEAD http://localhost:5000/v2/alpine/manifests/latest
> sha256:df73ed0973f15f40496c148330f9b559f0a5583c03f6ac8d26adadf6f4690aff
> DELETE http://localhost:5000/v2/alpine/manifests/sha256:df73ed0973f15f40496c148330f9b559f0a5583c03f6ac8d26adadf6f4690aff
[ { code: 'UNSUPPORTED', message: 'The operation is unsupported.' } ]
Run Code Online (Sandbox Code Playgroud)
自找到REGISTRY_STORAGE_DELETE_ENABLED
变量以来,我正在更新我的问题。
我现在这样运行注册表容器,
docker run -d -p 5000:5000 -e REGISTRY_STORAGE_DELETE_ENABLED=true --name registry2 registry
Run Code Online (Sandbox Code Playgroud)
会产生一个新的错误,
[ { code: …
Run Code Online (Sandbox Code Playgroud) 我使用最新的Oracle VirtualBox运行最新的Docker Toolbox,Windows 7作为主机操作系统.
我正在尝试启用对Docker远程API的非TLS访问,因此我可以使用在Windows上运行的Postman REST客户端,并在VirtualBox中的docker-machine上运行docker API.我发现如果包含Docker配置-H tcp://0.0.0.0:2375
,那就可以在docker机器的端口2375上暴露API,但是对于我来说,我无法找到这个配置的存储位置并且可以更改.
我docker-machine ssh
从Toolbox CLI 做了,然后去了/etc/init.d/docker
文件,但没有对文件的更改存活docker-machine restart
.
我能够为Ubuntu和OSX找到这个问题的答案,但不能用于Windows.
基本上我需要这样的东西
docker run -p something:something --name xxxx imagename
Run Code Online (Sandbox Code Playgroud)
在golang sdk(这一个https://docs.docker.com/engine/api/sdks/)的docker api中,我当前的代码看起来像这样
exposedPorts, portBindings, _ := nat.ParsePortSpecs([]string{
"127.0.0.1:8080:2368",
})
// Running the ghost container
createdBody, err := dockerClient.ContainerCreate(context.Background(),
&container.Config{
Image: "ghost:latest",
ExposedPorts: exposedPorts,// it supposed to be nat.PortSet
},
&container.HostConfig{
PortBindings: portBindings,// it supposed to be nat.PortMap
},
&network.NetworkingConfig{},
containerName)
Run Code Online (Sandbox Code Playgroud)
我正在使用这个https://github.com/docker/go-connections/blob/master/nat/nat.go#L126 ParsePortSpecs函数返回(map [Port] struct {},map [Port] [] PortBinding ,错误)但失败,因为container.Config.ExposedPorts是nat.PortSet(它实际上是map [Port] struct {} tho)和containter.HostConfig.PortBindins是nat.PortMap
我不确定我是否要使用此客户端https://github.com/fsouza/go-dockerclient,因为我当前版本的docker API为1.25,并且它不支持高于1.23的API版本
我们可以使用 tarball 或 zip 存档构建一个 docker 镜像,其中包含 dockerfile 吗?我需要使用 docker api 从档案构建图像。
有没有任何参考或资源,我搜索了 3o 分钟但找不到任何东西。
请帮帮我!提前致谢!
当前,要使用golang api将文件放入容器中,我首先必须创建容器,然后使用CopyToContainer
函数(下面的示例)。
是否可以创建一个容器并为创建时指定的容器指定文件,而无需先将文件放在文件系统上?
示例1)
func main() {
cli, err := client.NewEnvClient()
if err != nil {
panic(err)
}
resp, err := cli.ContainerCreate(context.Background(),
&container.Config{
Image: "alpine",
Cmd: []string{"ls", "/"},
}, nil, nil, "testContainer")
if err != nil {
panic(err)
}
fmt.Printf("Created: %v\n", resp.ID)
cli.CopyToContainer(context.Background(), resp.ID, "/", getTar(),types.CopyToContainerOptions{})
}
func getTar() io.Reader {
...
}
Run Code Online (Sandbox Code Playgroud)
编辑:
-代码间距。
docker-api ×10
docker ×9
go ×3
bash ×1
curl ×1
docker-build ×1
docker-image ×1
dockerfile ×1
mysql ×1
prisma ×1
rest ×1
shell ×1
windows ×1
windows-7 ×1