version: '3.8' networks: registry: external: false volumes: registry_data: driver: local portainer_data: driver: local services: # Private Docker Registry registry: image: registry:2 container_name: docker-registry environment: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry REGISTRY_HTTP_ADDR: 0.0.0.0:5000 REGISTRY_STORAGE_DELETE_ENABLED: "true" volumes: - registry_data:/var/lib/registry ports: - "5000:5000" networks: - registry restart: unless-stopped healthcheck: test: ["CMD", "wget", "--spider", "-q", "http://localhost:5000/v2/"] interval: 30s timeout: 10s retries: 3 # Registry UI (optional) registry-ui: image: joxit/docker-registry-ui:latest container_name: registry-ui environment: - REGISTRY_TITLE=Private Docker Registry - REGISTRY_URL=http://registry:5000 - DELETE_IMAGES=true - SHOW_CONTENT_DIGEST=true ports: - "5001:80" networks: - registry depends_on: - registry restart: unless-stopped # Watchtower для автообновления watchtower: image: containrrr/watchtower:latest container_name: watchtower-global environment: - WATCHTOWER_CLEANUP=true - WATCHTOWER_POLL_INTERVAL=300 - WATCHTOWER_INCLUDE_STOPPED=true - WATCHTOWER_REVIVE_STOPPED=true - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=${SLACK_WEBHOOK_URL} volumes: - /var/run/docker.sock:/var/run/docker.sock networks: - registry restart: unless-stopped