Amazon web services Docker私有注册表:ping尝试失败
我正在尝试设置我的私人Docker注册表,我正在遵循以下步骤。 我已经安装了Docker,并且能够在服务器上运行我的注册表。但我希望我的注册表可以更广泛地使用。 带有专用注册表的My docker服务器安装在AWS实例上。 我已使用keytool创建了自己的证书和密钥:Amazon web services Docker私有注册表:ping尝试失败,amazon-web-services,dns,docker,docker-registry,Amazon Web Services,Dns,Docker,Docker Registry,我正在尝试设置我的私人Docker注册表,我正在遵循以下步骤。 我已经安装了Docker,并且能够在服务器上运行我的注册表。但我希望我的注册表可以更广泛地使用。 带有专用注册表的My docker服务器安装在AWS实例上。 我已使用keytool创建了自己的证书和密钥: docker run -d -p 5000:5000 --restart=always --name registry \ -v `pwd`/certs:/certs \ -e REGISTRY_HTTP_TLS_CER
docker run -d -p 5000:5000 --restart=always --name registry \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
我可以通过以下方式ping此实例:
ping ec2-xx-xx-xx-xx.xx-west/east-1.compute.amazonaws.com
但推动是不可能的:
The push refers to a repository [ec2-xx-xx-xx-xx.compute.amazonaws.com:5000/ubuntu] (len: 1)
unable to ping registry endpoint https://ec2-xx-xx-xx-xx.compute.amazonaws.com:5000/v0/
v2 ping attempt failed with error: Get https://ec2-xx-xx-xx-xx.compute.amazonaws.com:5000/v2/: dial tcp 10.x.x.x:5000: i/o timeout
v1 ping attempt failed with error: Get https://ec2-xx-xx-xx-xx.amazonaws.com:5000/v1/_ping: dial tcp 10.0.x.x:5000: i/o timeout
EDIT1:
更改aws安全组后。将端口5000设置为TCP,错误已更改:
unable to ping registry endpoint https://ec2-xx-xx-xx-xx.compute.amazonaws.com:5000/v0/
v2 ping attempt failed with error: Get https://ec2-xx-xx-xx-xx.compute.amazonaws.com:5000/v2/: dial tcp 10.0.x.x:5000: connection refused
v1 ping attempt failed with error: Get https://ec2-xx-xx-xx-xx.compute.amazonaws.com:5000/v1/_ping: dial tcp 10.0.x.x:5000: connection refused
如何使其他aws实例可以访问我的注册表?
我的docker日志如下所示。他们找不到我的证书
level=fatal msg="open /certs/domain.crt: no such file or directory"
我必须把这个证书放在我的容器里吗?(并由本人或使用现有工具使用keytool生成)
EDIT2:
我已经用这个生成了我自己的证书。
生成证书后,我重新启动了docker守护进程。我没有将domain.crt复制到ca.crt,因为路径不存在。也许我必须自己创造它
新错误:
unable to ping registry endpoint https://ec2-xx-xx-xx-xx.compute.amazonaws.com:5000/v0/
v2 ping attempt failed with error: Get https://ec2-xx-xx-xx-xx.compute.amazonaws.com:5000/v2/: dial tcp 10.0.x.x:5000: no route to host
v1 ping attempt failed with error: Get https://ec2-xx-xx-xx-xx.compute.amazonaws.com:5000/v1/_ping: dial tcp 10.0.x.x:5000: no route to host
但我的docker日志中仍然有以下内容:
level=fatal msg="open /certs/domain.crt: no such file or directory"
尝试执行推送后,会在我现有的certsfolder中创建一个新的/certs文件夹
EDIT3:
找到证书的正确目录(/home/centos/certs/certs/*)后。我得到以下错误:
level=fatal msg="open /certs/domain.crt: permission denied
即使我执行了
chmod-R 777
和chown-R root:root
您也需要将证书放在此目录中
/etc/docker/certs.d/<your-domain-name>:5000/ca.crt
/etc/docker/certs.d/:5000/ca.crt
愚蠢的问题,但您是否在安全组防火墙中打开了端口5000?是的,它为UDPDOS打开docker pull localhost:5000/image
在框本身上工作?在运行注册表的框上,sudonetstat-tunlp
的输出是什么?您还可能需要在注册表框中配置nginx(注册表容器中有两个从内存装入的文件),以侦听对EC2公共DNS名称的请求。@ChrisMcKinnel,pull似乎可以工作,容器本身上该命令的输出包含端口5000:tcp6 0:::5000::*LISTEN 2515/docker proxy
在我将UDP设置为TCP(通过https)后,输出已更改。我已经编辑了这个问题