gpt4 book ai didi

docker - 使用自签名证书配置本地注册表

转载 作者:行者123 更新时间:2023-12-02 05:45:53 24 4
gpt4 key购买 nike

我想使用自签名证书配置本地 docker 注册表,我将在本地网络中使用该证书。我遵循 docker 手册 [1, 2] 中的说明,但仍然遇到了错误。

准确地说,我的问题如下。我在本地注册表计算机上创建一个自签名证书:

openssl req \                                 
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-x509 -days 365 -out certs/domain.crt \
-subj "/C=US/ST=Oregon/L=Portland/O=Company Name/OU=Org/CN=openmpi-dockerregistry.local"

我把这个证书放入/etc/docker/certs.d/openmpi-dockerregistry:443/ca.crt在每台本地计算机上。

然后我启动注册表并将图像推送到那里。由于我的网络中没有配置 DNS,所以我只是将一个条目放入 /etc/hosts .

接下来我尝试在本地机器上拉取镜像,但是此操作失败:

$ docker run -it openmpi-dockerregistry.local:443/hello-world
Unable to find image 'openmpi-dockerregistry.local:443/hello-world:latest' locally
docker: Error response from daemon: Get https://openmpi-dockerregistry.local:443/v2/: x509: certificate is not valid for any names, but wanted to match openmpi-dockerregistry.local.
See 'docker run --help'.

我对消息“x509:证书对任何名称都无效”非常怀疑,这听起来我没有正确指定 CN,但读取证书表明相反的情况( full output ):

 $ openssl x509 -text -noout -in certs/domain.crt
....
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, ST = Oregon, L = Portland, O = Company Name, OU = Org, CN = openmpi-dockerregistry.local
....

我尝试的另一个选择是直接通过IP访问寄存器。我按照手册[3] 并将 IP SAN 添加到证书中。另外我还设置了 CN=*。这样生成的证书现在包含以下内容 ( full ):

        X509v3 extensions:
X509v3 Subject Alternative Name:
IP Address:<ip address>

但是现在当我尝试提取图像时,我收到以下错误消息:

$ docker run -it  <ip>:443/hello-world
Unable to find image '<ip>:443/hello-world:latest' locally
docker: Error response from daemon: Get https://<ip>:443/v2/: x509: cannot validate certificate for <ip> because it doesn't contain any IP SANs.
See 'docker run --help'

虽然文件/etc/docker/certs.d/<ip>:443/ca.crt包含 IP 地址。

你能帮我找到一种从本地注册表提取图像的方法吗?

更新

如何启动 docker 注册表?

$ docker run -d \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:$REGISTRY_PORT \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-p $REGISTRY_PORT:$REGISTRY_PORT \
--restart=always \
--name registry \
registry:2
  1. https://docs.docker.com/registry/insecure/#use-self-signed-certificates
  2. https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry
  3. https://bowerstudios.com/node/1007

最佳答案

我认为问题是您没有将证书和 key 复制到 /etc/docker/certs.d/ 文件夹中。

该文件夹应如下所示:

/etc/docker/certs.d/
└── openmpi-dockerregistry.local:443
├── client.cert
├── client.key
└── ca.crt

就我而言,我没有 ca.crt 并且工作正常。

引用:https://docs.docker.com/engine/security/certificates/

<小时/>

我在我的机器上实现了您的设置,在/etc/docker/certs.d 文件夹中复制了domain.key和domain.crt(并重命名它们)后,一切正常。唯一的区别是我使用 openmpi-dockerregistry 作为域,而不是 openmpi-dockerregistry.local

关于docker - 使用自签名证书配置本地注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47238301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com