标签: docker-registry

Docker注册表2.0 API v2

我拉了并设置了本地docker注册表:2.0

我已经尝试成功推送图像,但是当我尝试搜索图像时,我得到404:

root@ip-10-232-0-153:~# curl -v -X GET http://localhost:5000/v2/search
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET /v2/search HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:5000
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Content-Type: text/plain; charset=utf-8
< Docker-Distribution-Api-Version: registry/2.0
< Date: Fri, 08 May 2015 00:00:45 GMT
< Content-Length: 19
<
404 page not found
* Connection #0 to host localhost left intact
Run Code Online (Sandbox Code Playgroud)

此外,当我尝试卷曲localhost:5000时,我只得到404:

404 page …
Run Code Online (Sandbox Code Playgroud)

search curl http-status-code-404 docker docker-registry

21
推荐指数
1
解决办法
3万
查看次数

在 github 工作流程中构建和推送 docker 时,GITHUB_TOKEN 权限被拒绝写入包

我有一个 Github 组织,并尝试将容器注册表从 迁移docker hubGitHub Packages. 通过使用 Github Workflows,这是我用来将 docker 推送到的 yaml GitHub Packages

name: ghcr_test
on:
  push:
    branches:
      - dev

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Login to GitHub Packages
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push Docker image
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: ghcr.io/${{ github.repository }}:${{ github.sha }}
Run Code Online (Sandbox Code Playgroud)

GitHub 建议在操作工作流程中使用 GITHUB_TOKEN,我已经仔细检查了它在我的组织设置中是否具有读写权限,但他们给了我这个错误

Error: buildx …
Run Code Online (Sandbox Code Playgroud)

github docker-registry github-actions

20
推荐指数
3
解决办法
2万
查看次数

多大的 Docker 镜像大小被视为“太大”?

在我之前的公司,我们采用了微服务架构,并使用Docker来实现。我们的 Docker 镜像的平均大小为 ~300MB - ~600MB。然而,我的新公司主要使用 Docker 进行开发工作流程,平均镜像大小约为 1.5GB - 3GB。一些较大的图像(10GB+)正在积极重构以减小图像大小。

从我读到的所有内容来看,我觉得这些镜像太大了,我们会遇到问题,但团队的其他成员认为 Docker Engine 和 Docker Swarm 应该可以毫无问题地处理这些镜像大小。

我的问题:Docker 镜像是否有一个公认的理想范围,以及尝试使用 GB 镜像的工作流程时会遇到哪些陷阱(如果有)?

docker dockerfile docker-registry

18
推荐指数
2
解决办法
2万
查看次数

从EC2 AMI创建一个泊坞窗图像/容器

我是docker的新手,我正在尝试将我的AWS EC2 AMI导入docker镜像.该图像是m2 linux图像.

我还设置了一个私人码头中心(神器),我打算将图像推送到其中并使其可供使用.将AMI导入docker镜像而不从基本图像开始并更新的步骤是什么.

任何解释的指针也会起作用.

docker dockerhub dockerfile docker-registry

17
推荐指数
2
解决办法
2万
查看次数

来自守护程序的错误响应:获取https://registry-1.docker.io/v2/:在192.168.65.1:53上拨打tcp:lookup registry-1.docker.io:没有这样的主机

我是码头工人的新手.当我运行docker pull sonarqube时,我收到以下错误.

来自守护程序的错误响应:获取https://registry-1.docker.io/v2/:在192.168.65.1:53上拨打TCP:查找registry-1.docker.io:没有这样的主机

你能告诉我为什么我会收到错误吗?我该如何纠正这个问题.

docker docker-registry docker-machine

17
推荐指数
7
解决办法
3万
查看次数

Docker注册表的Docker/GitLab身份验证返回401错误

我正在尝试使用gitlab(docker)的auth配置我的docker注册表.

docker login registry.website.com了给我一个401 Unauthorized错误:

Error response from daemon: login attempt to https://registry.website.com/v2/ failed with status: 401 Unauthorized
Run Code Online (Sandbox Code Playgroud)

在docker日志中我找到了

{ "level":"info","msg":"token signed by untrusted key with ID: \"IWNY:KT2H:YUN5:STQP:22LM:YNIU:RT4T:AZO7:TBVL:ZQ3I:Z4JZ:LA3T\"","time":"2018-12-17T23:36:03.538232467Z" }
{ [...] "level":"warning","msg":"error authorizing context: invalid token","service":"registry","source":"registry","time":"2018-12-17T23:36:03.53860308Z","version":"v2.6.2" }
Run Code Online (Sandbox Code Playgroud)

我的钥匙是通过做生成的

$ sudo openssl req -new -newkey rsa:4096 -subj "/CN=gitlab-issuer" -nodes -x509 -keyout registry-auth.key -out registry-auth.crt
$ sudo chmod 400 registry-auth.key
Run Code Online (Sandbox Code Playgroud)

在我的调试尝试中,我得到了不同的sha256摘要:

459b854f47c51bd94e0fd696cc35148cf93065df986abcc368cf13958373d298
459b854f47c51bd94e0fd696cc35148cf93065df986abcc368cf13958373
Run Code Online (Sandbox Code Playgroud)

正如@VDR所示,这是正常的,因为前30个字符被使用.因此,键应该没有问题.但为什么我会收到401错误?

这是我配置gitlab和注册表的方式:

docker gitlab(gitlab.rb)的配置使用key by

gitlab_rails['registry_key_path'] = "/certs/registry-auth.key"
Run Code Online (Sandbox Code Playgroud)

注册表配置有

auth.token.rootcertbundle: /root/certs/registry-auth.crt
Run Code Online (Sandbox Code Playgroud)

我不知道我在这里缺少什么......

authentication gitlab docker docker-registry

17
推荐指数
1
解决办法
558
查看次数

使用docker上托管的私有注册表

我在docker容器中托管我自己的docker-registry.它是由nginx在一个单独的容器中运行来添加基本身份验证的.检查_ping路由我可以看到nginx正确路由.docker login从boot2docker(在Mac OSX上)调用时出现此错误:

FATA守护进程的错误响应:无效的注册表端点https://www.example.com:8080/v1/:获取https://www.example.com:8080/v1/_ping:x509:证书由未知签名权威.如果此私有注册表仅支持具有未知CA证书的HTTP或HTTPS,请添加--insecure-registry www.example.com:8080到守护程序的参数.对于HTTPS,如果您可以访问注册表的CA证书,则不需要该标志; 只需将CA证书放在/etc/docker/certs.d/www.example.com:8080/ca.crt

这很奇怪 - 因为它是有效的CA SSL证书.我已经尝试--insecure-registry按照这些说明添加EXTRA-ARGS:https://github.com/boot2docker/boot2docker#insecure-registry但最初"profile"文件不存在.如果我创建它,并添加

EXTRA_ARGS="--insecure-registry www.example.com:8080"
Run Code Online (Sandbox Code Playgroud)

我看不出任何进步.我想隔离这个例子,所以尝试docker login从ubuntu VM(而不是boot2docker).现在我得到一个不同的错误:

Error response from daemon: 
Run Code Online (Sandbox Code Playgroud)

docker注册表直接从公共集线器运行,例如

docker run -d -p 5000:5000 registry
Run Code Online (Sandbox Code Playgroud)

(注意nginx路由从8080到5000).任何帮助和/或资源来帮助调试这将非常感激.

UPDATE

我正在寻找一个帮助全面解决这个问题的指南.特别:

  • 创建一个私人注册表
  • 使用基本身份验证来保护注册表
  • 使用boot2docker中的注册表

我创建了注册表并在本地测试,它的工作原理.我已经使用nginx添加基本身份验证来保护注册表.

麻烦现在实际上是使用两种类型客户端的注册表:

1)非boot2docker客户端.下面的答案之一有助于此.我在/ etc/default/docker中为选项添加了--insecure-registry标志,现在我可以与远程docker注册表进行通信了.但是,这与auth不兼容,因为docker login收到错误:

2015/01/15 21:33:57 HTTP code 401, Docker will not send auth headers over HTTP.
Run Code Online (Sandbox Code Playgroud)

所以,如果我想使用auth,我需要使用HTTPS.我已经有这个服务器通过HTTPS服务,但如果我设置--insecure-registry,这不起作用.似乎存在证书信任问题,我相信我可以在非boot2docker上解决但是..

2)对于boot2docker客户端,我不能让--insecure-registry工作或证书被信任?

更新2

这个堆栈交换问题后,我设法将ca添加到我的ubuntu VM,现在我可以从非boot2docker客户端使用.但是,仍有很多奇怪的行为.

即使我当前的用户是docker组的成员(所以我不必使用sudo)我现在必须使用sudo或者在尝试登录或从我的私人注册表中提取时出现以下错误

user@ubuntu:~$ docker login example.com:8080 …
Run Code Online (Sandbox Code Playgroud)

docker boot2docker docker-registry

16
推荐指数
2
解决办法
2万
查看次数

如何设置docker在每个构建步骤中使用来自注册表的缓存

我有两台带有docker的服务器和一台带有私有注册表的服务器.

我在第一台机器上建了Dockerfile; 然后我将图像推送到注册表.

是否可以使用我的注册表中的缓存立即在第二台机器上构建Dockerfile?如果不是,有没有办法加速构建"几乎"相同的Dockerfiles而不编写我自己的缓存?

它试图设置,--registry-mirror但它没有帮助.

caching docker docker-registry

16
推荐指数
3
解决办法
6890
查看次数

在Jenkinsfile中使用私有docker注册表和Authentication

如何教我的Jenkisfile在此设置中通过基本身份验证登录?

我正在为我的Jenkins构建使用自定义docker镜像.正如在这里的文档中所描述的那样,我定义了一个这样的docker代理:

pipeline {
agent { 
    docker {
        image 'registry.az1:5043/maven-proto'
        registryUrl 'https://registry.az1'
        args '-v /var/jenkins_home/.m2:/root/.m2'
    }
}
options {
    timeout(time: 1, unit: 'HOURS')
    buildDiscarder(logRotator(numToKeepStr:'10'))
}

stages {
    stage ('Build') {
        steps{
            sh ...
        }
    }

    stage ('Test') {
        steps {
            sh ...
        }
    } 

     stage ('Deploy') {
        steps {
            sh ...
        }
    }
}

post {
    always {
        echo 'Clean up workspace'
        deleteDir()
    }
}
Run Code Online (Sandbox Code Playgroud)

}

如果我使用以下代理设置:

pipeline {
agent { 
    docker.withRegistry('https://registry.az1', 'registry_login'){
        image 'registry.az1:5043/maven-proto'
        registryUrl 'https://registry.az1'
        args …
Run Code Online (Sandbox Code Playgroud)

jenkins docker docker-registry jenkins-pipeline

16
推荐指数
1
解决办法
2万
查看次数

Docker私有注册表与镜像

我创建了两个Docker容器.第一个提供私有Docker注册表,第二个是官方Docker注册表的镜像:

docker run -d --name registry -v /local/path/to/registry:/registry -e SETTINGS_FLAVOR=local -e STORAGE_PATH=/registry -p 5000:5000 registry

docker run -d --name mirror -v /local/path/to/mirror:/registry -e STORAGE_PATH=/registry -e STANDALONE=false -e MIRROR_SOURCE=https:/registry-1.docker.io -e MIRROR_SOURCE_INDEX=https://index.docker.io -p 5555:5000 registry
Run Code Online (Sandbox Code Playgroud)

现在我想两者结合起来.每当用户提取图像时,它应首先查询私有注册表,然后查询镜像.当图像被推送时,它们应该只被推送到私人注册表.

我不知道如何做到这一点.任何帮助表示赞赏.

docker docker-registry

15
推荐指数
3
解决办法
2万
查看次数