基于path的多个容器和交换容器的一个主机

我用docker后端使用traefik 。 这里是我如何开始traefik:

$ cat docker-compose.yml version: '2' networks: default: external: name: proxy services: traefik: image: traefik command: --web --docker --docker.domain=docker --logLevel=WARNING container_name: traefik ports: - "80:80" - "8080:8080" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock - /dev/null:/traefik.toml labels: - "traefik.frontend.rule=Host:dashboard.docker" - "traefik.port=8080" 

我想要2个容器,一个是dockerregistry ,第二个是registry的UI 。 我希望像registry.docker/v2/*所有的HTTP请求通过registry容器,但任何其他请求( registry.docker/ registry.docker/repositories/20 ,…)通过UI容器。

这是我试过的:

 $ cat docker-compose.yml version: '2' networks: default: external: name: proxy services: registry: image: registry:2 container_name: registry environment: - REGISTRY_STORAGE_DELETE_ENABLED=true labels: - traefik.frontend.rule=Host:registry.docker, PathPrefix:/v2 - traefik.frontend.port=5000 registry-ui: image: konradkleine/docker-registry-frontend:v2 container_name: registry-ui environment: - ENV_DOCKER_REGISTRY_HOST=registry.docker - ENV_DOCKER_REGISTRY_PORT=80 - ENV_DOCKER_REGISTRY_USE_SSL=false labels: - traefik.frontend.rule=Host:registry.docker 

但所有请求都通过registry容器。 我应该改变什么?

我想你在这里有一个错字,根据我有的文件,这里是一个可能的解决scheme

尝试这个 :

 version: '2' networks: default: external: name: proxy services: registry: image: registry:2 container_name: registry environment: - REGISTRY_STORAGE_DELETE_ENABLED=true labels: - traefik.frontend.rule: Host:registry.docker;PathPrefix:/v2 - traefik.frontend.port: 5000 registry-ui: image: konradkleine/docker-registry-frontend:v2 container_name: registry-ui environment: - ENV_DOCKER_REGISTRY_HOST=registry.docker - ENV_DOCKER_REGISTRY_PORT=80 - ENV_DOCKER_REGISTRY_USE_SSL=false labels: - traefik.frontend.rule: Host:registry.docker