AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[docker-registry](server)

Martin Hope
Alexander Sofianos
Asked: 2021-10-31 23:59:24 +0800 CST

Docker 私有注册表作为 kubernetes pod - 已删除的图像自动重新创建

  • 0

我将 docker 私有注册表 v2.7.0 作为具有服务和持久卷的 kubernetes pod 运行,这要感谢 Varun Kumar G 教程,这是我设置中唯一成功的方法,让 kubernetes 从我的私有 docker 注册表中提取我的3 个节点 - 本地 - 带有 ubuntu 20.04 lts kvms 的集群。

问题在于从 kubernetes pod docker registry v2.7.0 中删除图像(必须使用以前的版本,因为最新的 v2.7.1 不适用于 htpasswd)。此外,我已经阅读了很多类似的主题,例如this、this和this。

使用 docker registry v2.7.1作为 docker 容器运行,我可以毫无问题地删除图像,

但是使用 docker registry v2.7.0作为 kubernetes pod运行,通常的删除步骤导致无法再次推送已删除的映像,即使在成功删除 blob 并手动删除/var/lib/registry/docker/registry/v2/repositories/.

下面是注册表 pod yaml

apiVersion: v1
kind: Pod
metadata:
  name: dockreg-pod
  labels:
    app: mregistry
spec:
  containers:
  - name: registry
    image: registry:2.7.0
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: repo-vol
      mountPath: "/var/lib/registry"
    - name: certs-vol
      mountPath: "/certs"
      readOnly: true
    - name: auth-vol
      mountPath: "/auth"
      readOnly: true
    env:
    - name: REGISTRY_AUTH
      value: "htpasswd"
    - name: REGISTRY_AUTH_HTPASSWD_REALM
      value: "Registry Realm"
    - name: REGISTRY_AUTH_HTPASSWD_PATH
      value: "/auth/htpasswd"
    - name: REGISTRY_HTTP_TLS_CERTIFICATE
      value: "/certs/tls.crt"
    - name: REGISTRY_HTTP_TLS_KEY
      value: "/certs/tls.key"
    - name: REGISTRY_STORAGE_DELETE_ENABLED
      value: "true"
  volumes:
  - name: repo-vol
    persistentVolumeClaim:
      claimName: repo-pvc
  - name: certs-vol
    secret:
      secretName: certs-secret
  - name: auth-vol
    secret:
      secretName: auth-secret
  restartPolicy: Always
  nodeName: spring

以下是持久卷 yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: repo-pv
  labels:
    type: prstore
spec:
  capacity:
    storage: 7Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    fsType: ext4
    path: /root/repo
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - spring
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: repo-pvc
  labels:
    type: prstore
spec:
  selector:
    matchLabels: 
      type: prstore
  volumeMode: Filesystem
  storageClassName: local-storage
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 7Gi

假设我在一个全新的注册表 pod 上推送一个图像,并且预先清除了持久性存储。

root@sea:scripts# docker push dockreg:5000/mubu4:v4
The push refers to repository [dockreg:5000/mubu4]
9f54eef41275: Pushed 
v4: digest: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f size: 529

删除图像似乎按预期工作,直到我再次尝试推送已删除的图像,此时我遇到了可怕的Layer already exists错误。

正如您可能在上面看到的,我在注册表 pod 环境中包含以下内容,

- name: REGISTRY_STORAGE_DELETE_ENABLED
      value: "true"

否则我会unsupported从调用中得到一个错误curl -X DELETE,即使在添加之后

delete:
    enabled: true

在/etc/docker/registry/config.yml吊舱内,

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

这似乎对我的用例没有影响。

以下是删除步骤。

curl -u alexander:sofianos \
> -vsk -H "Accept: \
> application/vnd.docker.distribution.manifest.v2+json" \
> -X DELETE \
> https://dockreg:5000/v2/mubu4/manifests/sha256:\
> 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f

上面打印了以下内容

> DELETE /v2/mubu4/manifests/sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f HTTP/2
> Host: dockreg:5000
> authorization: Basic YWxleGFuZGVyOnNvZmlhbm9z
> user-agent: curl/7.68.0
> accept: application/vnd.docker.distribution.manifest.v2+json
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 202 
< docker-distribution-api-version: registry/2.0
< x-content-type-options: nosniff
< content-length: 0
< date: Sat, 30 Oct 2021 13:25:53 GMT
< 
* Connection #0 to host dockreg left intact

这似乎是有序的。

下面,从注册表 pod 中删除 blob

root@sea:scripts# kubectl exec -it dockreg-pod -- sh
/ # bin/registry garbage-collect  /etc/docker/registry/config.yml
mubu4

0 blobs marked, 3 blobs and 0 manifests eligible for deletion
blob eligible for deletion: sha256:7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/7b/7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54  go.version=go1.11.2 instance.id=82a101ee-47f4-4f4f-bc79-76d774b0924b service=registry
blob eligible for deletion: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/7b/7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f  go.version=go1.11.2 instance.id=82a101ee-47f4-4f4f-bc79-76d774b0924b service=registry
blob eligible for deletion: sha256:ecb35fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/ec/ecb35fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085  go.version=go1.11.2 instance.id=82a101ee-47f4-4f4f-bc79-76d774b0924b service=registry

最后,手动删除存储库映像

/ # rm -rf /var/lib/registry/docker/registry/v2/repositories/mubu4

在我的持久存储上,注册表现在看起来像这样

root@spring:repo# tree
.
└── docker
    └── registry
        └── v2
            ├── blobs
            │   └── sha256
            │       ├── 7b
            │       └── ec
            └── repositories

8 directories, 0 files

但是当我再次尝试推送已删除的图像时,我得到了

root@sea:scripts# docker push dockreg:5000/mubu4:v4
The push refers to repository [dockreg:5000/mubu4]
9f54eef41275: Layer already exists 
v4: digest: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f size: 529

在我的注册表中,我之前删除的 mubu4 图像文件夹已通过上述推送命令神秘地重新创建。

root@spring:repo# tree
.
└── docker
    └── registry
        └── v2
            ├── blobs
            │   └── sha256
            │       ├── 7b
            │       └── ec
            └── repositories
                └── mubu4
                    └── _manifests
                        ├── revisions
                        │   └── sha256
                        │       └── 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
                        │           └── link
                        └── tags
                            └── v4
                                ├── current
                                │   └── link
                                └── index
                                    └── sha256
                                        └── 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
                                            └── link

19 directories, 3 files

我还尝试用

root@spring:repo# rm -rf *

无济于事。之后尝试推送已删除的图像,仍然输出完全相同的Layer already exists错误,并且注册表树再次自动重新创建,看起来与上述树输出中的完全相同。

问题是我还能尝试什么来完成这项工作,和/或替代地,

从上面的测试可以看出,在 docker registry kubernetes pod 中,还有其他文件,这些文件保存了已删除图像似乎没有被删除的配置,并且这些文件通过 docker push 调用激活了已删除图像的重新创建。除了树我应该往哪里看

/var/lib/registry/docker/registry/v2/

所以我可以删除对已删除图像的所有引用?

images docker-registry docker kubernetes yaml
  • 1 个回答
  • 393 Views
Martin Hope
RazorHail
Asked: 2021-08-15 13:58:56 +0800 CST

Docker Registry 仅拉/推 443

  • 2

我已经设置了一个 Docker Registry(端口 5000),然后可以通过反向代理(HAproxy)通过 https(端口 443)访问互联网。

我的反向代理没有监听端口 80(由于各种原因) - 只有 443。

但是,当我尝试将图像拉/推到注册表时,我收到此错误:

> docker push dockerreg.mydomain.tld/foo/bar:tag
The push refers to repository [dockerreg.mydomain.tld/foo/bar]
67e5bc702bd3: Layer already exists
1ee6a18298af: Layer already exists
0d8d066a4449: Layer already exists
....
402111a9b517: Layer already exists
5be968ab3b04: Layer already exists
b8d33b7d28fe: Layer already exists
Patch http://dockerreg.mydomain.tld/v2/foo/bar/blobs/uploads/840a9fc2-5c10-4c0e-b674-82f76c3794a3?_state=vcTZPbOrQmhcKwilCyutNGwVpFjvWigJCApZHA834757Ik5hbWUiOiJmb3Rvd2V0dGVyL2NsZWFuIiwiVVVJRCI6Ijg0MGE5ZmMyLTVjMTAtNGMwZS1iNjc0LTgyZjc2YzM3OTRhMyIsIk9mZnNldCI6MCwiU3RhcnRlZEF0IjoiMjAyMS0wOC0xNFQyMTozODo1Mi42MzgxNjY5NTdaIn0%3D:
dial tcp 1.2.3.4:80: i/o timeout

所以显然它试图通过 http/80 访问注册表

我可以使用 docker login 命令,https://dockerreg....但 docker pull/push 命令不能使用 https:// 运行

有没有办法在我的反向代理的端口 80 上访问我的 docker 注册表而无需 https-redirect?

docker-registry docker
  • 1 个回答
  • 698 Views
Martin Hope
Bernd Haug
Asked: 2021-07-27 13:10:08 +0800 CST

系统范围的 Docker 登录?

  • 0

有没有办法将整台机器/Docker 守护进程记录到注册表中?

我看到的关于 docker login 和各种专有凭证助手使用的所有内容~/.docker/config.json,即每个用户。

我有一种情况,我想从私有注册表中提取图像;多人在这些机器上都拥有任意 sudo 访问权限,并且应该能够针对我们的注册表使用 Docker。

由于 Docker 访问无论如何都应该被读取为对机器的 root 访问(即,如果用户可以运行 Docker,则用户凭据不是相互安全的),并且 sudo 访问是相同但直接的,我想切入正题并记录整个机器在没有每个用户都必须跳过箍的情况下。

我可以提供一个文件,每个人都可以链接到他们config.json的 .

security authentication docker-registry docker devops
  • 1 个回答
  • 537 Views
Martin Hope
Travis
Asked: 2021-06-29 07:37:19 +0800 CST

为什么我的容器在我提交后不包含数据库数据?

  • 0

我正在尝试创建一个已经包含开发数据的 PostgreSQL 容器。我可以看到我创建的数据,但是当我commit、、push和pull图像时,数据不存在。

下面是我的 Dockerfile:

FROM postgis/postgis:11-2.5
MAINTAINER Me

# Contents of 20-init_db.sql:
# CREATE EXTENSION IF NOT EXISTS btree_gist;
# CREATE EXTENSION IF NOT EXISTS hstore;
COPY ./20-init_db.sql /docker-entrypoint-initdb.d/20-init_db.sql
COPY ./make_data.sh /make_data.sh

我使用下面的脚本创建了容器,并且成功填充了数据。

#!/bin/bash

aws ecr get-login-password --region us-east-1 | \
    docker login --username AWS --password-stdin 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com

aws ecr create-repository --repository-name dev_postgres --region us-east-1

# Make sure the build environment is clean
docker stop dev_postgres_container
docker rm dev_postgres_container
docker rmi dev_postgres_img

# Prepare the container
docker build -f postgres.Dockerfile -t dev_postgres_img .
docker run -d --name dev_postgres_container \
    -e POSTGRES_DB=the_database \
    -e POSTGRES_USER=the_user \
    -e POSTGRES_PASSWORD=the_password \
    -e PGDATA=/var/lib/postgresql/data/pgdata
    dev_postgres_img
docker exec -it dev_postgres_container bash /make_data.sh

###
### This returns the correct number of users, so there is data in the container at this point.
###
docker exec -it dev_postgres_container /usr/bin/psql -U the_user the_database -c "select count(*) from auth_user;"

# Commit the container state and save it to Amazon ECR:
docker commit $(docker ps -q --filter "name=dev_postgres_container") 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:11-2.5-with-data

# Also tag it with "latest" and the timestamp
docker tag 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:11-2.5-with-data 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data
docker tag 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:11-2.5-with-data 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:$( date -u +%Y%m%d_%H%MZ )-with-data

# Push
docker push 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres --all-tags

但是,当我在隔离环境中拉容器时,没有数据:

brew install virtualbox
brew install multipass
sudo multipass set local.driver=virtualbox
multipass launch --name ubuntu2
multipass mount ~/.aws ubuntu2:/home/ubuntu/.aws
multipass mount ./db ubuntu2:/home/ubuntu/db
multipass exec ubuntu2 -- bash /home/ubuntu/db/test_db_container.sh

### Contents of test_db_container.sh are below: ###

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

sudo apt-get install -y awscli

# Pull Docker container:
aws ecr get-login-password --region us-east-1 | \
    sudo docker login --username AWS --password-stdin 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com
sudo docker pull 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data

sudo docker run -d --name the_db 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data

###
### The auth_user table does not exist.
###
sudo docker exec -it the_db /usr/bin/psql -U the_user the_database -c "select count(*) from auth_user;"

sudo docker history 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data

## Result:
IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
854dbef239c2   23 hours ago   postgres                                        70B
4b1bd66a8d33   23 hours ago   COPY ./make_data.sh /make_data.sh               3.03kB    buildkit.dockerfile.v0
<missing>      23 hours ago   COPY ./20-init_db.sql /docker-entrypoint-ini…   188B      buildkit.dockerfile.v0
<missing>      23 hours ago   MAINTAINER Me                                   0B        buildkit.dockerfile.v0
[...]

旁注:我考虑过创建一个数据卷容器,但这种方法似乎更简单且文档更好。

其他注意事项:我无法在 Dockerfile 中添加数据,因为 Postgres 需要在插入数据之前运行。

为什么不docker commit保存我的容器的状态?为什么图像不包含数据?

postgresql docker-registry docker amazon-ecr
  • 1 个回答
  • 388 Views
Martin Hope
DavisTasar
Asked: 2021-04-02 07:14:32 +0800 CST

连接时Gitlab Container Registry超时

  • 0

首次构建 Gitlab 的本地/自托管部署。我已经完成了自我安装,单个盒子和三个用于跑步者的专用主机(我正在努力让它们为 docker-in-docker 码头化)。

这是两天前从软件包安装中完成的,所以没有从源代码构建,99% 的东西仍然来自开箱即用的综合安装程序。

我正在尝试启动并运行 Container Registry,以便我可以签入容器并将它们拉到我的 CI/CD 管道中,但是每次我的本地主机尝试进行身份验证时,它都会超时。当我启用调试日志时,它似乎没有生成任何东西?

PS C:\Users\my_user_name\docker-gl-runner> docker login gitlab.my_domain.tld:5050 -u my_user_name 
Password:
Error response from daemon: Get https://gitlab.my_domain.tld:5050/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

我确实有一个用户帐户设置,我确实生成了一个个人访问令牌,并且都尝试了(用户名 + 密码,用户名 + 令牌)。

该服务正在侦听 5050:

[root@gitlab gitlab]# netstat -an | grep 50..
tcp        0      0 0.0.0.0:5050            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:5001          0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:5001          127.0.0.1:46666         ESTABLISHED
tcp        0      0 127.0.0.1:5001          127.0.0.1:46560         TIME_WAIT
tcp        0      0 127.0.0.1:46666         127.0.0.1:5001          ESTABLISHED

以下是 gitlab.rb 文件中的相关设置(我相信):

[root@gitlab gitlab]# cat gitlab.rb | grep registry
# gitlab_rails['gitlab_default_projects_features_container_registry'] = true

registry_external_url 'https://gitlab.my_domain.tld'
gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = "gitlab.my_domain.tld"
gitlab_rails['registry_port'] = "5005"
gitlab_rails['registry_path'] = "/var/opt/gitlab/gitlab-rails/shared/registry"
# gitlab_rails['registry_notification_secret'] = nil
# gitlab_rails['registry_api_url'] = "http://localhost:5000"
# gitlab_rails['registry_key_path'] = "/var/opt/gitlab/gitlab-rails/certificate.key"
# gitlab_rails['registry_issuer'] = "omnibus-gitlab-issuer"

registry['enable'] = true
# registry['username'] = "registry"
# registry['group'] = "registry"
# registry['uid'] = nil
# registry['gid'] = nil
registry['dir'] = "/var/opt/gitlab/registry"
registry['registry_http_addr'] = "localhost:5000"
registry['debug_addr'] = "localhost:5001"
registry['log_directory'] = "/var/log/gitlab/registry"
registry['env_directory'] = "/opt/gitlab/etc/registry/env"

registry['log_level'] = "info"
registry['log_formatter'] = "text"
# registry['rootcertbundle'] = "/var/opt/gitlab/registry/certificate.crt"
# registry['health_storagedriver_enabled'] = true
# registry['storage_delete_enabled'] = true
# registry['validation_enabled'] = false
# registry['autoredirect'] = false
# registry['compatibility_schema1_enabled'] = false

关于有什么不同、搞砸或应该调查的任何想法?或者甚至可能是,“这是我的样子,和你的比较一下”(如果你给我看你的,我就给你看?)

docker-registry gitlab containers
  • 1 个回答
  • 1751 Views
Martin Hope
Blake Simmons
Asked: 2021-03-02 13:36:34 +0800 CST

为什么我的 docker 注册表拒绝来自本地网络中的虚拟机而不是主机的连接?

  • 1

对于上下文 - 我正在尝试在气隙环境中部署 OKD,这需要镜像镜像注册表。然后,在安装过程中,网络中的其他机器会从这个私有、安全的注册表中提取。

描述环境 - 运行注册表容器的主机正在运行 Centos 7.6。其他机器都是使用 libvirt 运行 Fedora coreOS 的虚拟机。虚拟机和主机使用使用 libvirt 创建的虚拟网络连接,其中包括虚拟机的 DHCP 设置(通过 virsh net-edit 配置),为它们提供静态 IP。主机还托管 DNS 服务器(绑定),据我所知,它配置正确,因为我可以使用其完全限定的域名从其他机器 ping 每台机器并访问特定端口(例如端口主机上的 apache 服务器监听)。使用 Podman 代替 Docker 进行 OKD 的容器管理,但据我所知,命令完全相同。

我使用以下命令在气隙环境中运行注册表:

sudo podman run --name mirror-registry -p 5000:5000 -v /opt/registry/data:/var/lib/registry:z \
-v /opt/registry/auth:/auth:z -v /opt/registry/certs:/certs:z -e REGISTRY_AUTH=htpasswd \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.pem -e REGISTRY_HTTP_TLS_KEY=/certs/registry-key.pem \
-d docker.io/library/registry:latest

可以使用curl -u username:password https://host-machine.example.local:5000/v2/_catalogwhich returns访问它{"repositories":[]}。我相信这证实了我的 TLS 和授权配置是正确的。但是,如果我将 ca.pem 文件(用于签署注册表使用的 SSL 证书)传输到虚拟网络上的 VM 之一,并尝试使用相同的curl命令,我会收到错误消息:

connect to 192.168.x.x port 5000 failed: Connection refused
Failed to connect to host-machine.example.local port 5000: Connection refused
Closing connection 0

这对我来说很奇怪,因为过去我已经能够使用这种方法从 VM 与注册表进行通信,但我不确定发生了什么变化。

经过进一步挖掘,似乎端口本身存在某种问题,但我无法确定问题出在哪里。例如,如果我sudo netstat -tulpn | grep LISTEN在主机上运行,​​我会收到一条指示 podman (conmon) 正在侦听正确端口的行:

tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 48337/conmon

但是,如果我测试该端口是否可以从 VM 访问,(nc -zvw5 192.168.x.x 5000)我会收到类似的错误:Ncat: Connection refused.如果我在主机上的任何其他侦听端口上使用相同的测试,则表明与这些端口的连接成功。

请注意,我已经完全禁用了 firewalld,据我所知,所有端口都是开放的。

我不确定问题出在我的 DNS 设置、虚拟网络还是注册表本身,我不太确定如何进一步诊断问题。任何见解将不胜感激。

网络定义:

<network connections='6'>
  <name>okd</name>
  <uuid>2ce10cce-9bb6-4d5d-950f-15427172b196</uuid>
  <bridge name='virbr1' stp='on' delay='0'/>
  <mac address='52:54:00:d9:d6:95'/>
  <domain name='okd'/>
  <ip address='192.168.2.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.2.200' end='192.168.2.254'/>
      <host mac='52:54:00:45:93:07' name='okd-bootstrap' ip='192.168.2.200'/>
      <host mac='52:54:00:f0:0a:1c' name='okd-master1' ip='192.168.2.201'/>
      <host mac='52:54:00:d1:29:9e' name='okd-master2' ip='192.168.2.202'/>
      <host mac='52:54:00:c9:a4:bb' name='okd-master3' ip='192.168.2.203'/>
      <host mac='52:54:00:25:5d:48' name='okd-worker1' ip='192.168.2.204'/>
      <host mac='52:54:00:1e:90:3c' name='okd-worker2' ip='192.168.2.205'/>
    </dhcp>
  </ip>
</network>
ssl libvirt docker-registry containers virtual-network
  • 1 个回答
  • 1116 Views
Martin Hope
Vicent Blanes
Asked: 2021-01-17 04:08:36 +0800 CST

docker 本地注册表中的证书

  • 1

我正在尝试在我的大学网络中建立一个 docker 本地注册表。由于他们提供来自 reiris 的证书,我要求提供一个,所以我现在有三个不同的文件:

  1. 证书.pem
  2. 中间件.pem
  3. 链.pem

除此之外,我还保留了 .key 和 .csr。按照 docker 网站示例 ( https://docs.docker.com/registry/deploying/#get-a-certificate )

-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt

我无法理解如何将这些 pem 文件连接/转换为我需要的 domain.crt 文件,我所有的尝试都导致 docker 本地注册表将证书视为自签名。

非常感谢您,如果这个问题很愚蠢,我真的很抱歉,我对系统管理的了解很少。

certificate certificate-authority ssl-certificate docker-registry
  • 1 个回答
  • 119 Views
Martin Hope
Mangosniper
Asked: 2020-11-25 02:30:14 +0800 CST

在多个注册表上托管 docker 映像,但以相同的方式引用它们,例如在 k8s 部署中

  • 1

自从我开始使用 docker 之后,我就有一个问题,到目前为止我还没有得到一个好的答案。

假设我有一个指定 k8s 部署的 .yaml 文件。我们正在本地构建服务器上构建我们的 docker 镜像,它们被推送到本地注册表,例如 registry.mycompany.com,它只能在我们本地公司网络中访问。因此,在我的 .yaml 中,我将使用“image:registry.mycompany.com/myrepo/myimage:1.0”引用该图像。

现在,当我在本地 k8s 集群上部署它时,它可以正常工作,因为域名得到解析并且可以拉取图像。现在我想在任何云中部署相同的内容。好吧,它不会工作,因为注册表不可用。如果我想在我的一个客户位置部署相同的 .yaml 也是如此,他们也有充分的理由无法访问我的本地注册表。

这种事情一般是怎么解决的?现在,我在我的客户或云帐户中设置另一个注册表,重新标记我的所有图像并将它们推送到该注册表,并且当我在客户位置或云中部署时更改 .yamls 中的所有图像引用。因此,必须维护大量 99% 相同的文件集。那不是它应该如何工作吗?

我的“愿望”是我可以只指定图像名称和标签“myimage:1.0”,如果他能找到图像并拉取它,k8s 集群只会检查所有可用的注册表。但我也知道没有“知名注册表列表”,您可以在映像名称中指定注册表或将其省略,然后将查询 docker hub。但是,如果我可以指定只是

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: MyDeployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: myimage
    spec:
      containers:
        - name: myimage
          image: 'myimage:1.0'
          ports: []

和注册表列表:

registries:
    - registry.mycompany.com
    - registry.cloud.com
    - registry.localcustomer.com

但没有那样的事,对吧?

我能想到的唯一其他解决方案是将所有内容构建到 helm 图表中,使图像的第一部分引用一个变量并将注册表作为变量传递给图表。

欢迎任何想法和信息。提前致谢 :)

docker-registry docker kubernetes helm
  • 1 个回答
  • 557 Views
Martin Hope
MikeVelazco
Asked: 2020-05-27 08:06:19 +0800 CST

是否有可能有一个故障转移/备份 docker 注册表?

  • 2

自从上周quay.io 失败以来,公司里的每个人都认识到服务的重要性。这在我脑海中提出了这个问题:

如果再次发生这种情况,我的基础设施如何准备好使用辅助 docker 容器注册表以防第一个不可用?

amazon-web-services docker-registry docker amazon-ecr
  • 1 个回答
  • 1369 Views
Martin Hope
muffel
Asked: 2019-08-25 22:40:49 +0800 CST

如何将 Docker Registry 从文件系统迁移到 S3 存储?

  • 0

我将Docker Registry与文件系统存储驱动程序一起使用。我想要做的是将现有注册表迁移到与 S3 兼容的存储,而不会丢失数据。

虽然我可以在专用客户端上提取所有图像,重新配置注册表并再次推送,但由于已存储图像的大小和数量,我想找到一种更直接的方法。

有什么方法可以将数据从文件系统迁移到 S3 而无需重新推送图像?

docker-registry
  • 1 个回答
  • 516 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve