尝试在 Laravel 项目上构建 docker compose 时不受支持的选项

Posted

技术标签:

【中文标题】尝试在 Laravel 项目上构建 docker compose 时不受支持的选项【英文标题】:unsupported option when trying to build docker compose on a Laravel project 【发布时间】:2021-04-17 06:57:44 【问题描述】:

我正在关注this tutorial 使用 Docker-Compose 安装和设置 Laravel。我想构建一个可用于任何具有预安装软件依赖项的站点的映像。不过,这是我第一次迁移到 Docker。

我已将我的存储库克隆到我的/var/www 作为我的 FQDNS。我的 Laravel 文件现在位于 /var/www/example.co.uk。我已将我的.env 更改为使用DB_DATABASE=db,并设置了我想使用的相应用户和密码。

我的Dockerfile 现在看起来像这样:

FROM php:7.4-fpm

# Arguments defined in docker-compose.yml
ARG user
ARG uid

# Install system dependencies
RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

# Set working directory
WORKDIR /var/www/example.co.uk

USER $user

我的docker-compose.yml 现在看起来像这样:

version: "3.7"
services:
  app:
    build:
      args:
        user: iezonweb
        uid: 1001
      context: ./
      dockerfile: Dockerfile
    image: iezonweb
    container_name: iezonweb-app
    restart: unless-stopped
    working_dir: /var/www/example.co.uk
    volumes:
      - ./:/var/www/example.co.uk
    networks:
      - iezonweb

  db:
    image: mysql:5.7
    container_name: iezonweb-db
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: $DB_DATABASE
      MYSQL_ROOT_PASSWORD: $DB_PASSWORD
      MYSQL_PASSWORD: $DB_PASSWORD
      MYSQL_USER: $DB_USERNAME
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - ./docker-compose/mysql:/docker-entrypoint-initdb.d
    networks:
      - iezonweb

  nginx:
    image: nginx:alpine
    container_name: iezonweb-nginx
    restart: unless-stopped
    ports:
      - 8000:80
    volumes:
      - ./:/var/www/example.co.uk
      - ./docker-compose/nginx:/etc/nginx/conf.d/
    networks:
      - iezonweb

networks:
  iezonweb:
    driver: bridge

当我运行以下命令时:

$ docker-compose build app

我得到以下信息

ERROR: The Compose file './docker-compose.yml' is invalid because:
services.app.build contains unsupported option: 'container_name' error:

我查看了 SO 以找到任何相应的问题,这导致我删除了这一行。但是,它随后会因另一个 unsupported option: image 而失败,并且每次删除都会继续这条 unsupported option 链。

任何帮助将不胜感激。

更新 - 我当前的 docker 和 docker compose 版本如下:

$ docker-compose version

docker-compose version 1.27.4, build 40524192
docker-py version: 4.3.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

$ sudo docker version

Client: Docker Engine - Community
 Version:           20.10.2
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        2291f61
 Built:             Mon Dec 28 16:17:43 2020
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.2
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       8891c58
  Built:            Mon Dec 28 16:15:19 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.3
  GitCommit:        269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc:
  Version:          1.0.0-rc92
  GitCommit:        ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

【问题讨论】:

无法在本地重现。你的docker-compose version是什么? 您好,感谢您的评论。我已经用我当前的版本更新了我的问题@anemyte 【参考方案1】:

您的docker-compose.yml 中肯定存在缩进问题。 YAML 严重依赖 space indentation 来定义类似字典的结构。

services.app.build contains unsupported option: 'container_name'

不知何故,container_name 被解析为 services.app.build 的子元素,这意味着错误在此代码块周围:

services:
  app:
    build:
      args:
        user: iezonweb
        uid: 1001
      context: ./
      dockerfile: Dockerfile
    container_name: iezonweb-app

在这个例子中,container_nameapp 的子元素是正确的。但是,docker-compose.yml 可能有一个小的缩进错误,例如:

services:
  app:
    build:
      args:
        user: iezonweb
        uid: 1001
      context: ./
      dockerfile: Dockerfile
      # Mind number of space: container_name is now sub-elements
      # of build - which is invalid
      container_name: iezonweb-app

确保您没有混合使用 制表符空格,这可能会被您的编辑器区别对待并使某些元素出现在同一级别。

【讨论】:

谢谢!这解决了我的问题,我不知道它需要正确缩进。谢谢你

以上是关于尝试在 Laravel 项目上构建 docker compose 时不受支持的选项的主要内容,如果未能解决你的问题,请参考以下文章

为啥“起航”命令没有构建我的 laravel docker 容器?

Docker 上 Laravel 的文件权限 - 无法编辑文件

docker 从入门到自动化构建 PHP 环境 | Laravel China 社区

在 Docker 容器中使用 Laravel Mix 构建完整的 Tailwind 3 app.css 文件

使用 Docker 在 Jenkins 上使用“供应商”目录构建 Go 应用程序

如何在 M1 Mac 上运行 querydsl 项目测试?