为什么仅在构建 docker 图像时出现此错误
Why is this error occuring only when building the docker image
我已经将我的 Laravel 应用程序从 6 更新到 7,然后是 8,没有出现任何问题。但是,当我尝试构建我的 docker 图像时,它在 composer install --no-dev -o
命令处失败了。如果我 运行 在我的终端中执行相同的命令,则没有错误。
错误是
In Request.php line 335:
Argument 1 passed to Symfony\Component\HttpFoundation\Request::create() mus
t be of the type string, null given, called in /app/vendor/laravel/framewor
k/src/Illuminate/Foundation/Bootstrap/SetRequestForConsole.php on line 32
用于构建镜像的命令是@docker build $(DOCKER_BUILD_ARG) -t $(IMAGE_TAG) -f $(DOCKERFILE) .
这似乎是 laravel 框架文件的问题。我用谷歌搜索了这个错误,但没有找到任何解决方案。我尝试 运行 composer dump autoload,php artisan cache:clar 和 php artisan config:clear,none 这些解决了我的问题。
我的 docker 文件如下所示:
FROM armcanada/php7-mssql:latest
# Copy files
ADD . /app/
ADD php.ini /etc/php.ini
ADD arm-http.conf /etc/httpd/conf.modules.d/arm-http.conf
# Install app dependencies
RUN composer install --no-dev -o
# Fix permissions
RUN chmod -R 777 ./storage
RUN chmod -R 777 ./bootstrap/cache
# Cache route & views
RUN php artisan route:cache
RUN php artisan view:cache
CMD ["start_httpd"]
和我的 composer.json:
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=7.3.0",
"armcanada/laravel-honeypot": "dev-master",
"bacon/bacon-qr-code": "^2.0",
"barryvdh/laravel-dompdf": "^0.8.6",
"box/spout": "^3.0.1",
"doctrine/dbal": "^2.7",
"erusev/parsedown": "^1.7",
"fideloper/proxy": "~4.0",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"hackzilla/password-generator": "^1.5",
"itsgoingd/clockwork": "^4.1",
"laravel/framework": "^8.0",
"laravel/helpers": "^1.3",
"laravel/tinker": "^2.0",
"laravel/ui": "^3.0",
"maatwebsite/excel": "^3.1",
"paragonie/constant_time_encoding": "^2.3",
"predis/predis": "^1.1",
"rickycezar/laravel-jwt-impersonate": "^1.3",
"spatie/laravel-permission": "^3.18",
"tymon/jwt-auth": "^1.0.0",
"yajra/laravel-datatables": "^1.4"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.2",
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "^9.0"
},
"autoload": {
"psr-4": {
"Mz\": "app/",
"Database\Seeders\": "database/seeders/"
},
"files": [
"app/Support/Helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\": "tests/"
}
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\Foundation\ComposerScripts::postInstall"
],
"post-update-cmd": [
"Illuminate\Foundation\ComposerScripts::postUpdate"
],
"post-autoload-dump": [
"Illuminate\Foundation\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/armcanada/laravel-honeypot"
}
],
"extra": {
"laravel": {
"dont-discover": [
"tymon/jwt-auth"
]
}
}
}
当我在 运行 composer install 之前有 .env
文件时,我遇到了同样的错误,然后它工作正常
我设法通过编辑 app/config.php
文件解决了这个问题。
错误是 url
键为空,所以我向 env()
函数添加了一个默认值:
'url' => env('APP_URL', 'default'),
我已经将我的 Laravel 应用程序从 6 更新到 7,然后是 8,没有出现任何问题。但是,当我尝试构建我的 docker 图像时,它在 composer install --no-dev -o
命令处失败了。如果我 运行 在我的终端中执行相同的命令,则没有错误。
错误是
In Request.php line 335:
Argument 1 passed to Symfony\Component\HttpFoundation\Request::create() mus
t be of the type string, null given, called in /app/vendor/laravel/framewor
k/src/Illuminate/Foundation/Bootstrap/SetRequestForConsole.php on line 32
用于构建镜像的命令是@docker build $(DOCKER_BUILD_ARG) -t $(IMAGE_TAG) -f $(DOCKERFILE) .
这似乎是 laravel 框架文件的问题。我用谷歌搜索了这个错误,但没有找到任何解决方案。我尝试 运行 composer dump autoload,php artisan cache:clar 和 php artisan config:clear,none 这些解决了我的问题。
我的 docker 文件如下所示:
FROM armcanada/php7-mssql:latest
# Copy files
ADD . /app/
ADD php.ini /etc/php.ini
ADD arm-http.conf /etc/httpd/conf.modules.d/arm-http.conf
# Install app dependencies
RUN composer install --no-dev -o
# Fix permissions
RUN chmod -R 777 ./storage
RUN chmod -R 777 ./bootstrap/cache
# Cache route & views
RUN php artisan route:cache
RUN php artisan view:cache
CMD ["start_httpd"]
和我的 composer.json:
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=7.3.0",
"armcanada/laravel-honeypot": "dev-master",
"bacon/bacon-qr-code": "^2.0",
"barryvdh/laravel-dompdf": "^0.8.6",
"box/spout": "^3.0.1",
"doctrine/dbal": "^2.7",
"erusev/parsedown": "^1.7",
"fideloper/proxy": "~4.0",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"hackzilla/password-generator": "^1.5",
"itsgoingd/clockwork": "^4.1",
"laravel/framework": "^8.0",
"laravel/helpers": "^1.3",
"laravel/tinker": "^2.0",
"laravel/ui": "^3.0",
"maatwebsite/excel": "^3.1",
"paragonie/constant_time_encoding": "^2.3",
"predis/predis": "^1.1",
"rickycezar/laravel-jwt-impersonate": "^1.3",
"spatie/laravel-permission": "^3.18",
"tymon/jwt-auth": "^1.0.0",
"yajra/laravel-datatables": "^1.4"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.2",
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "^9.0"
},
"autoload": {
"psr-4": {
"Mz\": "app/",
"Database\Seeders\": "database/seeders/"
},
"files": [
"app/Support/Helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\": "tests/"
}
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\Foundation\ComposerScripts::postInstall"
],
"post-update-cmd": [
"Illuminate\Foundation\ComposerScripts::postUpdate"
],
"post-autoload-dump": [
"Illuminate\Foundation\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/armcanada/laravel-honeypot"
}
],
"extra": {
"laravel": {
"dont-discover": [
"tymon/jwt-auth"
]
}
}
}
当我在 运行 composer install 之前有 .env
文件时,我遇到了同样的错误,然后它工作正常
我设法通过编辑 app/config.php
文件解决了这个问题。
错误是 url
键为空,所以我向 env()
函数添加了一个默认值:
'url' => env('APP_URL', 'default'),