我拉了并设置了本地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) 我有一个 Github 组织,并尝试将容器注册表从 迁移docker hub到GitHub 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) 在我之前的公司,我们采用了微服务架构,并使用Docker来实现。我们的 Docker 镜像的平均大小为 ~300MB - ~600MB。然而,我的新公司主要使用 Docker 进行开发工作流程,平均镜像大小约为 1.5GB - 3GB。一些较大的图像(10GB+)正在积极重构以减小图像大小。
从我读到的所有内容来看,我觉得这些镜像太大了,我们会遇到问题,但团队的其他成员认为 Docker Engine 和 Docker Swarm 应该可以毫无问题地处理这些镜像大小。
我的问题:Docker 镜像是否有一个公认的理想范围,以及尝试使用 GB 镜像的工作流程时会遇到哪些陷阱(如果有)?
我是docker的新手,我正在尝试将我的AWS EC2 AMI导入docker镜像.该图像是m2 linux图像.
我还设置了一个私人码头中心(神器),我打算将图像推送到其中并使其可供使用.将AMI导入docker镜像而不从基本图像开始并更新的步骤是什么.
任何解释的指针也会起作用.
我是码头工人的新手.当我运行docker pull sonarqube时,我收到以下错误.
来自守护程序的错误响应:获取https://registry-1.docker.io/v2/:在192.168.65.1:53上拨打TCP:查找registry-1.docker.io:没有这样的主机
你能告诉我为什么我会收到错误吗?我该如何纠正这个问题.
我正在尝试使用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)
我不知道我在这里缺少什么......
我在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
我正在寻找一个帮助全面解决这个问题的指南.特别:
我创建了注册表并在本地测试,它的工作原理.我已经使用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的服务器和一台带有私有注册表的服务器.
我在第一台机器上建了Dockerfile; 然后我将图像推送到注册表.
是否可以使用我的注册表中的缓存立即在第二台机器上构建Dockerfile?如果不是,有没有办法加速构建"几乎"相同的Dockerfiles而不编写我自己的缓存?
它试图设置,--registry-mirror但它没有帮助.
如何教我的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) 我创建了两个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-registry ×10
docker ×9
dockerfile ×2
boot2docker ×1
caching ×1
curl ×1
dockerhub ×1
github ×1
gitlab ×1
jenkins ×1
search ×1