尝试在 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_name
是app
的子元素是正确的。但是,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 文件