我已经创建了一个本地 docker 注册表,我想从另一个容器/服务内部访问它。撰写文件如下所示:
registry:
image: "registry"
container_name: registry
restart: always
environment:
REGISTRY_STORAGE_DELETE_ENABLED: "true"
ports:
- ${REGISTRY_PORT:-5100}:5000
volumes:
- ${REGISTRY_PATH:-./registry}:/var/lib/registry:rw
update:
profiles: ["service2"]
image: "service2"
container_name: service2
depends_on:
- registry
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
我可以从本地 ip 和端口
172.19.3.1:5100
(例如 curl 172.19.3.1:5100/v2/_catalog
)从 service2 容器内部访问注册表,而容器 ip 地址是:
registry 172.19.3.2
service 172.19.3.3
我想知道如何获取或确定注册表本地 docker IP 地址将是
xxx.1
(或将分配的任何内容),因为注册表服务已启动 xxx.2
?
您正在通过本地主机(您的计算机)的端口
5100
公开您的注册表,172.19.3.1
IP 地址适用于您自己的电脑,端口 5100 也被公开,默认情况下 docker 在所有接口上公开端口。这样您就可以通过主机连接到容器。
如果您想绕过主机并从其他容器连接到容器,建议使用您的服务名称,它将解析为其他容器的IP地址。
在你的docker-compose中,你的registry服务名称是
registry
,你的service2服务名称是update
,在service2容器中,如果你运行nslookup registry
或curl -v registry
,你会看到名称被解析为IP 地址。
所以如果你跑步
curl registry:5000/v2/_catalog
你应该得到同样的回应
希望有帮助! :)