【问题标题】:service.volumes must be mapping in dockerservice.volumes 必须在 docker 中映射
【发布时间】:2022-11-04 18:48:46
【问题描述】:

这是一个 docker-compose.yml 文件。 当我运行 docker-compose-up 命令时,它会出现错误。 看起来像**服务。卷必须是映射** `

version: '3.9'
services:
  zookeeper:
    container_name: zookeeper
    image: wurstmeister/zookeeper
    ports:
      - '2181:2181'
  kafka:
    container_name: kafka
    image: wurstmeister/kafka
    ports:
      - '9092:9092'
  volumes:
    - ./data/kafka: /var/run/docker.sock
  environment: 
    KAFKA_ADVERTISED_HOST_NAME: kafka 
    KAFKA_ZOOKEEPER_CONNECT=zookeeper: 2181
  mongo:
    container_name: mongo
    image: mongo
    ports:
      - '27017:27017'
    volumes:
      - './data/mongo:/data/db'
  app1:
    container_name: app1
    build: ./app1
    ports:
      - '8080:8080'
    volumes:
      - ./app1:/app
    environment:
      PORT: 8080
      MONGO_URL: 'mongodb://mongo:27017/app1'
      KAFKA_BOOTSTRAP_SERVERS: 'kafka:9092'
      KAFKA_TOPIC: topic1
    depends_on:
      - mongo
      - kafka
  app2:
    container_name: app2
    build: ./app2
    ports:
      - '8081:8080'
    volumes:
      - ./app2:/app
    environment:
      PORT: 8081
      MONGO_URL: 'mongodb://mongo:27017/app2'
      KAFKA_BOOTSTRAP_SERVERS: 'kafka:9092'
      KAFKA_TOPIC: topic1
    depends_on:
      - mongo
      - kafka

`

基本上docker compose up 命令聚合了每个容器的输出。

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    docker-compose reference v3 更具体地说是 usage of volumes in Docker 指定在第一个参数中使用命名 volumes 而不是路径:

    -v--volume:由三个字段组成,以冒号字符 (:) 分隔。字段必须按正确的顺序排列,每个字段的含义不是很明显。

    • 在命名卷的情况下,第一个字段是卷的名称,并且在给定的主机上是唯一的。对于匿名卷,省略第一个字段。
    • 第二个字段是文件或目录在容器中的挂载路径。
    • 第三个字段是可选的,是一个逗号分隔的选项列表,例如 ro。这些选项将在下面讨论。

    [...]

    这意味着您不能直接在volumes 参数中使用路径。

    This question (How do I mount a host directory as a volume in docker compose — @Amin Shah Gilani) 谈论您的问题。你应该从the most populary answer from it(@Yuci) 获得灵感。

    【讨论】:

      【解决方案2】:

      正在使用的卷需要在 docker compose 中进行映射。

      在您的 docker 文件中,添加如下内容来映射卷并为您尝试映射的每个卷执行此操作。

        app2:
          container_name: app2
          build: ./app2
          ports:
            - '8081:8080'
          volumes:
            - app2:/app # ./app2 has been updated to app2, app2 is the volume name
          environment:
            PORT: 8081
            MONGO_URL: 'mongodb://mongo:27017/app2'
            KAFKA_BOOTSTRAP_SERVERS: 'kafka:9092'
            KAFKA_TOPIC: topic1
          depends_on:
            - mongo
            - kafka
      
        volumes:
          myapp2:
          # add the other volumes mapped here
      

      有关docker volume 的更多信息。

      【讨论】:

        猜你喜欢
        • 2017-09-13
        • 1970-01-01
        • 2018-09-30
        • 2020-08-17
        • 2019-03-17
        • 1970-01-01
        • 2017-12-17
        • 2021-08-30
        • 2018-12-28
        相关资源
        最近更新 更多