搭建私有仓库,用docker-registry 作为仓库,docker-registry-ui 作为界面。
原来的docker-compose.yml如下
services:
registry:
image: registry:2
container_name: registry
ports:
- "5000:5000" # 外网访问的端口
volumes:
- ./data:/var/lib/registry # 用于持久化数据存储
environment:
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin: '[http://192.168.77.130:8051]'
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods: '[HEAD,GET,OPTIONS,DELETE]'
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers: '[Authorization,Accept,Cache-Control]'
restart: always
registry-ui:
image: joxit/docker-registry-ui
container_name: registry-ui
environment:
- REGISTRY_URL=http://127.0.0.1:5000
- PUBLIC_URL=http://192.168.77.130:8051
- NGINX_PROXY_PASS_URL=http://127.0.0.1:5000
- SINGLE_REGISTRY=true
- NGINX_RESOLVER=127.0.0.1
ports:
- "8051:80" # Frontend 服务端口
depends_on:
- registry
restart: always
如上启动之后,登录仓库界面会有跨域问题:
关键点在于 - REGISTRY_URL=http://127.0.0.1:5000 此处不能写127.0.0.1 会导致跨域问题。要写成 - REGISTRY_URL=http://192.168.77.130:5000 用registry容器所在的地址。
原因:容器内的 127.0.0.1
不等于 宿主机的 127.0.0.1
。你在 docker-registry-ui
容器里配置的:
yaml- REGISTRY_URL=http://127.0.0.1:5000
它指的是 容器自身的 127.0.0.1:5000,而不是宿主机的 127.0.0.1:5000
—— 所以访问会失败。