Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用“;绑定&x201D;使用Docker compose文件在Docker Swarm内部进行卷装载_Docker_Docker Compose_Docker Swarm_Docker Volume - Fatal编程技术网

使用“;绑定&x201D;使用Docker compose文件在Docker Swarm内部进行卷装载

使用“;绑定&x201D;使用Docker compose文件在Docker Swarm内部进行卷装载,docker,docker-compose,docker-swarm,docker-volume,Docker,Docker Compose,Docker Swarm,Docker Volume,我的环境使用一个3节点Docker Swarm(都是管理者),我有一个Docker-compose.yaml,它是为部署到Swarm而创建的 在我的docker-compose.yaml中,我有两个正在安装的服务,一个是MySQL实例,另一个是我的定制Django应用程序 我想做的有两个方面: 我需要将本地目录(示例:/test)装载到容器中。此文件确实存在于主机/节点/服务器上,我正在尝试将其装载到容器中存在的文件中(示例:/tmp) 创建一个持久数据库文件夹,这样当容器退出时,我们的MySQ

我的环境使用一个3节点Docker Swarm(都是管理者),我有一个Docker-compose.yaml,它是为部署到Swarm而创建的

在我的docker-compose.yaml中,我有两个正在安装的服务,一个是MySQL实例,另一个是我的定制Django应用程序

我想做的有两个方面:

  • 我需要将本地目录(示例:/test)装载到容器中。此文件确实存在于主机/节点/服务器上,我正在尝试将其装载到容器中存在的文件中(示例:/tmp)
  • 创建一个持久数据库文件夹,这样当容器退出时,我们的MySQL就不会被破坏
  • 我的问题是,我无法获取本地主机文件(在本例中为/test)以显示在容器中。我尝试使用长语法和短语法来创建“绑定挂载”

    这是我的docker-compose.yaml文件:

    version: '3.2'
    services:
      project_mysql:
        environment:
          MYSQL_USER: 'project'
          MYSQL_PASSWORD: 'password1234'
        ports:
          - 3306:3306
        image: 'mysql/mysql-server'
        tty: true
        stdin_open: true
        deploy:
          mode: replicated
          replicas: 1
          restart_policy:
            condition: on-failure
          placement:
            constraints:
              - node.hostname == node1
        healthcheck:
          test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
          interval: "5s"
          timeout: "1s"
    
      project_web:
        image: 'localhost:5123/project_web:0.1.5'
        tty: true
        stdin_open: true
        volumes:
          - type: bind
            source: /test
            target: /tmp
        ports:
          - 8000:8000
        depends_on:
          - project_mysql
        healthcheck:
          test: ["CMD-SHELL", "nc -z 127.0.0.1 8000 || exit 1"]
          interval: "5s"
          timeout: "1s"
    
    networks:
      projectnet:
        driver: overlay
        ipam:
          config:
            - subnet: 10.2.0.0/24
    

    谢谢你的帮助

    您需要将命名卷添加到docker-compose.yaml文件中

    在启动实例之前,运行

    docker volume create mysql data


    然后,在
    docker compose.yaml中添加:

    services:
      project_mysql:
        volumes:
          - mysql-data:/var/lib/mysql
    
    volumes:
      mysql-data:
        external: true
    

    如果您终止该服务,数据仍然会保留。

    如果您终止该服务,您确定它会被删除吗?使用docker compose,将不会删除非外部命名卷。您是否找到了一种解决方案,可以将卷放在一个节点上,并且可以从其他节点访问它?