
字节笔记本
2026年10月7日 · 约 2 分钟读完
同名容器第二次起不来
安装用 apt 装 docker.io,再拉取 registry:2。运行参数是后台、端口 5000 对 5000、总是重启、名字 registry。标记示例是把 my-image:latest 标成 localhost:5000/my-image:latest,再推送和拉取这个名字。
证书那次没有先删掉同名容器
可选的证书步骤用 openssl 生成 domain.key 和 domain.crt,有效 365 天,密钥 4096。命令写的是 certs 目录,前面没有创建这个目录。然后再次 docker run,名字仍是 registry,把证书目录挂进 /certs,并用两个环境变量指向 crt 和 key。容器还在时,同名的第二次运行会因为名字被占用而失败,不会自动换成带证书的那一个。要换,得先停掉并删掉原来的那个名字。
用户要求可以不要证书。后一版去掉了 openssl,保留同样的运行和 localhost 推送。不安全仓库写在 /etc/docker/daemon.json 的 insecure-registries 里,示例域名是 myregistrydomain.com:5000,然后 systemctl restart docker。这个域名不是 localhost:5000。本机推送用的地址和名单里的地址不是同一条。别的机器要访问明文仓库时,才需要把它们实际使用的主机和端口写进那份名单,并重启守护进程。

明文意味着没有加密,也没有认证。知道地址的人可以推也可以拉。对话把这限定在受信任的网络里。不要把 5000 端口直接暴露到不受信任的网络再靠重启来补救。
官方镜像标签是 2。容器名和镜像名不是同一个字符串。镜像是 registry:2,容器才叫 registry。

标记、推送、拉取三步用的都是 localhost。从另一台机器操作时,localhost 指的是那一台自己,不是跑仓库的这一台。名单和地址要改成仓库所在的主机。
重启参数 always 会在守护进程起来之后把容器拉回来。改了 json 却没删掉旧容器,回来的仍是没有证书的那一个。



