首页 > 解决方案 > 当我尝试在 docker-compose 上将 nginx 部署到 MinIO 时出错

问题描述

我正在尝试在 docker 桌面(Windows 版本)上创建一个容器。我的项目包含一些容器。

我需要创建一个容器来运行 MinIO 来模拟 S3 存储桶。我在官方上得到了 docker-compose 文件。

的 docker-compose.yml是这样的:

services:
    rabbitmq:
        image: rabbitmq:3-management
        container_name: rabbitmq
        restart: always
        ports: 
            - 5672:5672
            - 15672:15672
        volumes: 
            - ./dados:/var/lib/rabbitmq/
        environment:
            - RABBITMQ_DEFAULT_USER=admin
            - RABBITMQ_DEFAULT_PASS=password
    minio1:
        image: minio/minio:RELEASE.2021-06-17T00-10-46Z
        hostname: minio1
        volumes:
            - ./dados/minios3/data1-1:/data1
            - ./dados/minios3/data1-2:/data2
        expose:
            - "9000"
        environment:
            MINIO_ROOT_USER: minio
            MINIO_ROOT_PASSWORD: minio123
        command: server http://minio{1...4}/data{1...2}
        healthcheck:
            test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
            interval: 30s
            timeout: 20s
            retries: 3
    nginx:
        image: nginx:1.19.2-alpine
        hostname: nginx
        volumes:
            - ./dados/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
        ports:
            - 9000:9000
        depends_on:
            - minio1

唯一的区别是我将卷路径更改为我的目录,脚本的其余部分来自官方文档。

当我运行docker-compose up -d命令时,所有容器都被创建,除了 Nginx。显示错误。

Creating microservicos_nginx_1  ... error

ERROR: for microservicos_nginx_1  Cannot start service nginx: OCI runtime create failed: container_linux.go:367: starting container process caused: process_linux.go:495: container init caused: rootfs_linux.go:60: mounting "/run/desktop/mnt/host/d/Projetos Dev/Microservicos/dados/nginx/nginx.conf" to rootfs at "/var/lib/docker/overlay2/310cee7797b9810694b18473c914d21cdad5422d7c0945f06464163f67d605aa/merged/etc/nginx/nginx.conf" caused: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

ERROR: for nginx  Cannot start service nginx: OCI runtime create failed: container_linux.go:367: starting container process caused: process_linux.go:495: container init caused: rootfs_linux.go:60: mounting "/run/desktop/mnt/host/d/Projetos Dev/Microservicos/dados/nginx/nginx.conf" to rootfs at "/var/lib/docker/overlay2/310cee7797b9810694b18473c914d21cdad5422d7c0945f06464163f67d605aa/merged/etc/nginx/nginx.conf" caused: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type      
ERROR: Encountered errors while bringing up the project.

原来的 docker-compose.yml 是:

version: '3.7'
services:
  minio1:
    image: minio/minio:RELEASE.2021-06-17T00-10-46Z
    hostname: minio1
    volumes:
      - data1-1:/data1
      - data1-2:/data2
    expose:
      - "9000"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio2:
    image: minio/minio:RELEASE.2021-06-17T00-10-46Z
    hostname: minio2
    volumes:
      - data2-1:/data1
      - data2-2:/data2
    expose:
      - "9000"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio3:
    image: minio/minio:RELEASE.2021-06-17T00-10-46Z
    hostname: minio3
    volumes:
      - data3-1:/data1
      - data3-2:/data2
    expose:
      - "9000"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio4:
    image: minio/minio:RELEASE.2021-06-17T00-10-46Z
    hostname: minio4
    volumes:
      - data4-1:/data1
      - data4-2:/data2
    expose:
      - "9000"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  nginx:
    image: nginx:1.19.2-alpine
    hostname: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "9000:9000"
    depends_on:
      - minio1
      - minio2
      - minio3
      - minio4

有人知道为什么会发生此错误以及如何解决?

标签: nginxdocker-composeminio

解决方案


您不需要添加 Nginx 文件名:nginx.conf. 只要有它的路径:

修改这个:

        - ./dados/nginx/nginx.conf:/etc/nginx/nginx.conf:ro

        - ./dados/nginx/:/etc/nginx/

并确保两条路径都正确:

  • ./dados/nginx/
  • /etc/nginx/

这是我的,它可以正常工作并注意部分(它不适合 MINIO

webserver:
    depends_on:
        - wordpress
    image: nginx:1.18.0-alpine
    container_name: webserver
    restart: unless-stopped
    ports:
        - "80:80"
    volumes:
        - ./html:/var/www/html
        - ./nginx:/etc/nginx/conf.d
    networks:
        - wp-network

推荐阅读