docker swarm中django项目的卷装载代码,以便跨swarm中的所有节点创建容器

docker swarm中django项目的卷装载代码,以便跨swarm中的所有节点创建容器,docker,docker-compose,docker-swarm,docker-volume,Docker,Docker Compose,Docker Swarm,Docker Volume,我试图在Digital Ocean上实现跨越3个节点(节点1(管理者)、节点2(工作者)、节点3(工作者))的docker swarm。 我有两个django服务器(python映像)在容器中运行,还有一个postgresDb容器 因为代码在node1中,我在node1中绑定挂载了一个目录。这两个django容器仅在node1中创建 对于postgres容器,我可以附加一个卷(即卷装载),因此postgres容器分布在3个节点上 我认为主要的问题是因为代码在node1中,我在node1中硬编码i

我试图在Digital Ocean上实现跨越3个节点(节点1(管理者)、节点2(工作者)、节点3(工作者))的docker swarm。 我有两个django服务器(python映像)在容器中运行,还有一个postgresDb容器

因为代码在node1中,我在node1中绑定挂载了一个目录。这两个django容器仅在node1中创建

对于postgres容器,我可以附加一个卷(即卷装载),因此postgres容器分布在3个节点上

我认为主要的问题是因为代码在node1中,我在node1中硬编码ie绑定挂载目录路径,这些django容器没有在其他节点中创建,而对于postgres容器,因为我使用的是一个卷,它的容器分布在节点上

是否有一种变通方法,可以将每个django服务器的代码目录进行卷绑定,或者将所有代码复制到一个卷中?但这似乎效率不高,而且随着代码库的增长,这可能需要很多时间

下面我提到了我的docker-stack.yml文件,其中的注释提到了我上面提到的内容:

version: "3"
services: 
  tatkal_website:    
    image: sourabhkondapaka/tatkal_website
    restart: on-failure 

    deploy:
      replicas: 3
      update_config:
        parallelism: 2
        delay: 10s

    links:
      - "tatkal_booking_service:bookingService"


    networks:
      - net

    ports: 
      - 8000:8000

    volumes: 
      - ./WebSite/:/home/project/      # Bind mounting ./Website (django server directory)

    depends_on: 
      - db    

    command: >
     sh -c "python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000"

  tatkal_booking_service:

    image: sourabhkondapaka/tatkal_booking_service   
    restart: on-failure 

    ports: 
      - 8001:8000

    volumes: 
      - ./Booking_Service/:/home/project/ #Bind mounting ./Booking_Service (django serverdirectory)

    networks:
      - net


    deploy:
      replicas: 3
      update_config:
        parallelism: 2
        delay: 10s

    depends_on: 
      - db    

    command: >
     sh -c "python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000"  

  db:

    image: sourabhkondapaka/tatkal_postgres_db  
    restart: on-failure 


    networks:
      - net

    deploy:
      replicas: 4
      update_config:
        parallelism: 2
        delay: 10s


    ports: 
      - 7890:5432

    volumes: 
      - data:/var/lib/postgresql/data       # Volume mounted postgres container. So no issues.

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]

networks:
  net:


volumes:
  data:

您应该将应用程序代码构建到图像中,而不是试图将其绑定到图像中;这既是一种最佳做法,也避免了您遇到的问题。但这可能会导致容器尺寸过大,对吗?我只在图像超过1 GB左右时遇到过图像“太大”的问题。一个典型的基于Python的Web应用程序,如果不尝试包含机器学习模型,就不会有问题。谢谢你的努力。我发现的另一种方法是将所有代码复制到docker卷中,并将该卷装载到.yml文件中,而不是绑定装载。但在这种情况下,docker由于某种原因无法找到复制到卷中的任何文件。参考链接: