我目前正在尝试在 Artifacory (v4.7.4) 中设置私有 Docker 注册表。
我已经设置了本地、远程和虚拟 docker 存储库,添加了 Apache 作为反向代理。为虚拟“docker”存储库添加了 DNS 条目。
反向代理正在工作,但如果我尝试类似的操作:
docker pull docker.my.company.com/ubuntu:16.04
Run Code Online (Sandbox Code Playgroud)
我越来越:
https://docker.my.company.com/v1/_ping:x509:证书对 *.company.com、company.com 有效,对 docker.my.company.com 无效
我的 Artifactory URL 是:“my.company.com/artifactory”,我希望可以在 repo.my.company.com/artifactory 上访问存储库。
我还有一个 company.com 的通配符证书,所以我不明白这里有什么问题。
或者有没有一种方法可以通过 http 而不使用 SSL 来访问 Artifactory
有任何想法吗?
我有一个 Gitlab 存储库,它托管一个用 React / NodeJS 制作的 Web 应用程序,因此,我将客户端和服务器放在同一个存储库中。
应用程序正在运行,我想使用 Gitlab 注册表我的 Docker 映像(客户端和服务器)。
事情是我的存储库的名称是:gitlab.com/group/project
它需要一个同名的 Docker 镜像。
相反,我有两个 Docker 镜像:
所以,它不会让我推送我的图像。我得到:
被拒绝:请求的资源访问被拒绝
我该怎么做 ?我不想创建两个存储库。
我想访问多个远程注册表来提取图像。在 k8s文档中他们说:
(如果您需要访问多个注册表,您可以为每个注册表创建一个密钥。Kubelet 会将任何 imagePullSecret 合并到单个虚拟 .docker/config.json 中)
所以 POD 定义应该是这样的:
apiVersion: v1
kind: Pod
spec:
containers:
- name: ...
imagePullSecrets:
- name: secret1
- name: secret2
- ....
- name: secretN
Run Code Online (Sandbox Code Playgroud)
现在我不确定K8S如何为每张图像选择正确的秘密?所有秘密每次都会被一一验证吗?K8S如何处理失败的重试?如果特定数量的未经授权的重试可能会导致 k8sor docker 注册表中出现某种锁定状态?
/ 谢谢
我正在尝试使用 HTTP API 将图像上传到我的私人 docker 注册表,不幸的是没有成功。
显然我还没有理解上传过程,想问是否有人可以详细解释这一点或将我推向正确的方向。
到目前为止,我已经尝试使用curl进行以下操作。为了进行实验,我仅使用空的高山图像。为此,我将其下载到我的工作站docker pull alpine,然后使用创建 tar 存档docker save -o alpine.tar alpine
然后我将此存档解压到 alpine 目录中。内容如下:
ls -R alpine
alpine:
39cb81dcd06e3d4e2b813f56b72da567696fa9a59b652bd477615b31af969239
e7d92cdc71feacf90708cb59182d0df1b911f8ae022d29e8e95d75ca6a99776a.json
manifest.json
alpine/39cb81dcd06e3d4e2b813f56b72da567696fa9a59b652bd477615b31af969239:
json
layer.tar
VERSION
Run Code Online (Sandbox Code Playgroud)
根据文档,我应该首先通过向 /v2//blobs/uploads/ URL 发送 POST 来启动上传,为此我执行以下命令:
curl -X POST -L -D headers $DOCKER_HOST/v2/alpine/blobs/uploads
答案如下:
cat headers
HTTP/1.1 301 Moved Permanently
Docker distribution api version: registry/2.0
location: /v2/alpine/blobs/uploads/
Date: Tu, 21 Jan 2020 12:42:55 GMT
content length: 0
HTTP/1.1 202 Accepted
content length: 0
Docker distribution api version: …Run Code Online (Sandbox Code Playgroud)
远程 Docker 似乎配置良好,但是当我尝试将任何映像下载到我的虚拟 docker 时,它总是失败并出现以下跟踪:
2020-04-01T16:20:32.969Z [jfrt ] [INFO ] [b6e7232e6d2e0cb4] [DockerV2VirtualRepoHandler:117] [http-nio-8081-exec-8] - Fetching docker manifest for repo 'thanosio/thanos' and tag 'latest'
2020-04-01T16:20:33.874Z [jfrt ] [ERROR] [b6e7232e6d2e0cb4] [.DockerV2RemoteRepoHandler:448] [http-nio-8081-exec-8] - Missing Manifest from docker-via-intranet 'v2/thanosio/thanos/manifests/latest' not found at docker-via-intranet:thanosio/thanos/latest/list.manifest.json
2020-04-01T16:20:34.703Z [jfrt ] [ERROR] [b6e7232e6d2e0cb4] [.DockerV2RemoteRepoHandler:448] [http-nio-8081-exec-8] - Missing Manifest from docker-remote 'v2/thanosio/thanos/manifests/latest' not found at docker-remote:thanosio/thanos/latest/list.manifest.json
2020-04-01T16:20:35.545Z [jfrt ] [ERROR] [b6e7232e6d2e0cb4] [.DockerV2RemoteRepoHandler:448] [http-nio-8081-exec-8] - Missing Manifest from quay-io 'v2/thanosio/thanos/manifests/latest' not found at quay-io:thanosio/thanos/latest/list.manifest.json
Run Code Online (Sandbox Code Playgroud) 我docker pull tiangolo/uwsgi-nginx-flask这样做了,docker hub 中的这个镜像大小是 345MB,但是当我将它拉到本地时,它增加到了 963MB。
所以,以下是我的问题:
我在启动 Pod 时收到此错误
Failed to pull image "docker-username/docker-private-repository:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for docker-username/docker-private-repository, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
Run Code Online (Sandbox Code Playgroud)
我的设置如下:
使用命令行创建秘密服务
kubectl create secret docker-registry docker-keys --docker-username=docker-username --docker-password=password --docker-email=docker-email@gmail.com --docker-server=https://index.docker.io/v1
Run Code Online (Sandbox Code Playgroud)
它会在机密内生成以下数据
kubectl get secret docker-keys -o json | jq '.data | map_values(@base64d)'
{
".dockerconfigjson": "{\"auths\":{\"https://index.docker.io/v1\":{\"username\":\"docker-username\",\"password\":\"password\",\"email\":\"docker-email@gmail.com\",\"auth\":\"base64encodedtoken\"}}}"
}
Run Code Online (Sandbox Code Playgroud)
然后在部署中我使用docker-keys秘密
apiVersion: apps/v1
kind: Deployment
metadata:
name: docker-private-repository
labels:
app: …Run Code Online (Sandbox Code Playgroud) 使用域方法在 GitLab Community Edition 14.2.4 中启用容器注册表的具体步骤是什么,以及如何将 docker 映像推送到注册表?另外,如何将 GitLab CI 与注册表集成?
仅指定以下字符串(如“在其域下配置容器注册表”中所述)不适用于 GitLab 社区版 14.2.4
registry_external_url 'registry.gitlab.example.com'
Run Code Online (Sandbox Code Playgroud) 目前,我正在开发一个非常轻量级的Docker容器编排器,而且我必须能够从公共Docker Hub注册表中获取映像摘要。我想为此使用Docker Registry API v2。
我正在尝试使用以下API调用获取授权令牌:
curl https://auth.docker.io/token?service=index.docker.io&scope=repository:alpine:pull
Run Code Online (Sandbox Code Playgroud)
...,我得到如下响应:
{"token":"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsIng1YyI6WyJNSUlDTHpDQ0FkU2dBd0lCQWdJQkFEQUtCZ2dxaGtqT1BRUURBakJHTVVRd1FnWURWUVFERXp0Uk5Gb3pPa2RYTjBrNldGUlFSRHBJVFRSUk9rOVVWRmc2TmtGRlF6cFNUVE5ET2tGU01rTTZUMFkzTnpwQ1ZrVkJPa2xHUlVrNlExazFTekFlRncweE5qQTFNekV5TXpVNE5UZGFGdzB4TnpBMU16RXlNelU0TlRkYU1FWXhSREJDQmdOVkJBTVRPMUV6UzFRNlFqSkpNenBhUjFoT09qSlhXRTA2UTBWWFF6cFVNMHhPT2tvMlYxWTZNbGsyVHpwWlFWbEpPbGhQVTBRNlZFUlJTVG8wVWtwRE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVo0NkVLV3VKSXhxOThuUC9GWEU3U3VyOXlkZ3c3K2FkcndxeGlxN004VHFUa0N0dzBQZm1SS2VLdExwaXNTRFU4LzZseWZ3QUFwZWh6SHdtWmxZR2dxT0JzakNCcnpBT0JnTlZIUThCQWY4RUJBTUNCNEF3RHdZRFZSMGxCQWd3QmdZRVZSMGxBREJFQmdOVkhRNEVQUVE3VVROTFZEcENNa2t6T2xwSFdFNDZNbGRZVFRwRFJWZERPbFF6VEU0NlNqWlhWam95V1RaUE9sbEJXVWs2V0U5VFJEcFVSRkZKT2pSU1NrTXdSZ1lEVlIwakJEOHdQWUE3VVRSYU16cEhWemRKT2xoVVVFUTZTRTAwVVRwUFZGUllPalpCUlVNNlVrMHpRenBCVWpKRE9rOUdOemM2UWxaRlFUcEpSa1ZKT2tOWk5Vc3dDZ1lJS29aSXpqMEVBd0lEU1FBd1JnSWhBTzYxSWloN1FUcHNTMFFIYUNwTDFZTWNMMnZXZlNydlhHbHpSRDEwN2NRUEFpRUFtZXduelNYRHplRGxqcDc4T1NsTFFzbnROYWM5eHRyYW0xU0kxY0ZXQ2tJPSJdfQ.eyJhY2Nlc3MiOltdLCJhdWQiOiJpbmRleC5kb2NrZXIuaW8iLCJleHAiOjE0NzQ1NDcyODMsImlhdCI6MTQ3NDU0Njk4MywiaXNzIjoiYXV0aC5kb2NrZXIuaW8iLCJqdGkiOiIzVTdCazF4dm9CLVA0MGJWVF9JSiIsIm5iZiI6MTQ3NDU0Njk4Mywic3ViIjoiIn0.516fS692WGHNi5Sc44iB8OFSLairrM6n1zNvVo5KXAxlsxsP4rE7VDmW5d0YqvTYeKfZAYIi9yEptx4xJlQ6DA"}
Run Code Online (Sandbox Code Playgroud)
似乎一切正常,我正在尝试将获得的令牌用于下一个API调用:
curl -i -H "Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsIng1YyI6WyJNSUlDTHpDQ0FkU2dBd0lCQWdJQkFEQUtCZ2dxaGtqT1BRUURBakJHTVVRd1FnWURWUVFERXp0Uk5Gb3pPa2RYTjBrNldGUlFSRHBJVFRSUk9rOVVWRmc2TmtGRlF6cFNUVE5ET2tGU01rTTZUMFkzTnpwQ1ZrVkJPa2xHUlVrNlExazFTekFlRncweE5qQTFNekV5TXpVNE5UZGFGdzB4TnpBMU16RXlNelU0TlRkYU1FWXhSREJDQmdOVkJBTVRPMUV6UzFRNlFqSkpNenBhUjFoT09qSlhXRTA2UTBWWFF6cFVNMHhPT2tvMlYxWTZNbGsyVHpwWlFWbEpPbGhQVTBRNlZFUlJTVG8wVWtwRE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVo0NkVLV3VKSXhxOThuUC9GWEU3U3VyOXlkZ3c3K2FkcndxeGlxN004VHFUa0N0dzBQZm1SS2VLdExwaXNTRFU4LzZseWZ3QUFwZWh6SHdtWmxZR2dxT0JzakNCcnpBT0JnTlZIUThCQWY4RUJBTUNCNEF3RHdZRFZSMGxCQWd3QmdZRVZSMGxBREJFQmdOVkhRNEVQUVE3VVROTFZEcENNa2t6T2xwSFdFNDZNbGRZVFRwRFJWZERPbFF6VEU0NlNqWlhWam95V1RaUE9sbEJXVWs2V0U5VFJEcFVSRkZKT2pSU1NrTXdSZ1lEVlIwakJEOHdQWUE3VVRSYU16cEhWemRKT2xoVVVFUTZTRTAwVVRwUFZGUllPalpCUlVNNlVrMHpRenBCVWpKRE9rOUdOemM2UWxaRlFUcEpSa1ZKT2tOWk5Vc3dDZ1lJS29aSXpqMEVBd0lEU1FBd1JnSWhBTzYxSWloN1FUcHNTMFFIYUNwTDFZTWNMMnZXZlNydlhHbHpSRDEwN2NRUEFpRUFtZXduelNYRHplRGxqcDc4T1NsTFFzbnROYWM5eHRyYW0xU0kxY0ZXQ2tJPSJdfQ.eyJhY2Nlc3MiOltdLCJhdWQiOiJpbmRleC5kb2NrZXIuaW8iLCJleHAiOjE0NzQ1NDcyODMsImlhdCI6MTQ3NDU0Njk4MywiaXNzIjoiYXV0aC5kb2NrZXIuaW8iLCJqdGkiOiIzVTdCazF4dm9CLVA0MGJWVF9JSiIsIm5iZiI6MTQ3NDU0Njk4Mywic3ViIjoiIn0.516fS692WGHNi5Sc44iB8OFSLairrM6n1zNvVo5KXAxlsxsP4rE7VDmW5d0YqvTYeKfZAYIi9yEptx4xJlQ6DA" https://index.docker.io/v2/alpine/manifests/latest
Run Code Online (Sandbox Code Playgroud)
...而我得到的是:
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
Docker-Distribution-Api-Version: registry/2.0
Www-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="repository:alpine:pull",error="invalid_token"
Date: Thu, 22 Sep 2016 12:27:54 GMT
Content-Length: 138
Strict-Transport-Security: max-age=31536000
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Name":"alpine","Action":"pull"}]}]}
Run Code Online (Sandbox Code Playgroud)
有人知道为什么令牌般的迷惑对于如此简单的流程会失败吗?
我想阻止对默认docker.io注册表的访问。为了安全/ IP保护,我们需要阻止对公共Docker集线器的推/拉访问。
已经有很多尝试将其设置为配置选项,但是所有PR都一直被拒绝。红帽已经实现了“ --block-registry”和“ --add-registry”,这正是我所需要的,但是它仅适用于Red Hat的docker v1.10的fork,我想使用docker v1。 12+
我正在使用RHEL / Centos 7
通过/ etc / hosts中的以下命令,DNS欺骗似乎不再起作用(不再):
127.0.0.1 index.docker.io registry.docker.io registry-1.docker.io docker.io
Run Code Online (Sandbox Code Playgroud)
而且我似乎无法通过以下规则来阻止防火墙访问(其中,IP地址当前是来自/ etc / hosts中列出的上述主机的IP):
# firewall-cmd --direct --get-rules ipv4 filter OUTPUT
0 -p tcp -m tcp --dport 5000 -j REJECT
0 -p tcp -m tcp --dport 443 -j REJECT
0 -p tcp -m tcp -d 52.207.178.113 -j DROP
0 -p tcp -m tcp -d 52.73.159.23 -j DROP
0 -p tcp -m tcp -d 54.85.12.131 …Run Code Online (Sandbox Code Playgroud) docker-registry ×10
docker ×7
gitlab ×2
kubernetes ×2
artifactory ×1
curl ×1
dockerhub ×1
gitlab-ce ×1
gitlab-ci ×1
http ×1
minikube ×1
registry ×1
ssl ×1