无法在Docker Swarm集群中将pypiserver部署为服务

-2 投票
1 回答
16 浏览
提问于 2025-04-13 01:08

你好。我正在尝试在我的Docker Swarm集群中部署一个PyPiServer服务。可惜的是,我无法成功部署这个服务。这里是我的堆栈信息,我想说明的是,我在当前目录下创建了一个pypi.yaml文件。我还在当前目录下创建了一个.htpasswd文件和一个packages文件夹。我希望从当前目录启动这个堆栈。所以,如果我的pypi.yaml配置有任何错误,请帮帮我。

version: '3.8'

services:
  pypi-server:
    image: pypiserver/pypiserver:latest
    networks:
      - traefik-public
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.pypi-server.rule=Host(`pypi.mydomaine.com`)"
        - "traefik.http.services.pypi-server.loadbalancer.server.port=8080"
        - "traefik.http.routers.pypi-server.entrypoints=websecure"
        - "traefik.http.routers.pypi-server.tls=true"
        - "traefik.http.routers.pypi-server.tls.certresolver=leresolver"
    ports:
      - "8081:8080"
    volumes:
      - /home/sheguey/.htpasswd:/data/auth/.htpasswd
      - /home/sheguey/packages:/data/packages
    command: -P /data/auth/.htpasswd -a update,download,list /data/packages
    restart: always

networks:
  traefik-public:
    external: true

我只是想在我的Docker Swarm集群中部署我的pypi服务器。

1 个回答

-1

虽然Docker Swarm可以在单个节点上运行,但如果想要支持多个节点的配置,就需要利用Docker的配置功能,以及某种分布式或网络文件存储,这样每个节点才能访问到所需的配置和数据文件。

我修改了提供的文件,演示了如何从与stack.yaml文件在同一文件夹中的.htpasswd文件创建Docker配置,并将其挂载到目标容器中,以及如何定义一个挂载网络共享的卷。


configs:
  htpasswd:
    file: .htpasswd

volumes:
  packages:
    driver_opts:
      type: "nfs"
      o: "nolock,soft,rw"
      device: "nfs-server-ip:/packages"

services:
  server:
    image: pypiserver/pypiserver:latest
    networks:
      - traefik
    deploy:
      labels:
        traefik.enable: "true"
        traefik.http.routers.pypi-server.rule: HostRegexp(`pypi.{any:.*}`)
        traefik.http.services.pypi-server.loadbalancer.server.port: 8080
        traefik.http.routers.pypi-server.entrypoints: websecure
        traefik.http.routers.pypi-server.tls: "true"
        traefik.http.routers.pypi-server.tls.certresolver: leresolver
    volumes:
      - packages:/data/packages
    configs:
      - source: htpasswd
        target: /data/auth/.htpasswd
    command: -P /data/auth/.htpasswd -a update,download,list /data/packages

networks:
  traefik:
    external: true
    name: traefik-public

撰写回答