laravel - 使用 Laravel Docker 容器部署到 Heroku 超时
问题描述
我对 Heroku 和 Docker 都很陌生,所以请原谅任何冗余,并感谢我能得到的任何帮助。
我有一个在本地运行良好的 Docker 容器。这是我的配置:
Docker文件:
FROM php:7
RUN apt-get update -y && apt-get install -y openssl zip unzip git
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN docker-php-ext-install pdo pdo_mysql
WORKDIR /app
COPY . /app
RUN composer install
CMD php artisan serve --host=0.0.0.0 --port=8181
EXPOSE 8181
码头工人-compose.yml:
version: '2'
services:
web:
build: .
ports:
- "8009:8000"
volumes:
- .:/app
env_file: .env
working_dir: /app
command: bash -c 'php artisan migrate && php artisan serve --host 0.0.0.0'
depends_on:
- db
links:
- db
db:
image: "mysql:5.7"
environment:
- MYSQL_ROOT_PASSWORD={pass}
- MYSQL_DATABASE={dbname}
- MYSQL_USER=root
- MYSQL_PASSWORD={pass}
volumes:
- ./data/:/var/lib/mysql
ports:
- "3306:3306"
phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin
restart: always
ports:
- 8090:80
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: {mypass}
我正在按如下方式部署到heroku:
#heroku container:login
#heroku container:push web --app bmbx-inventory
#heroku container:release web --app bmbx-inventory
这些都运行没有错误。
以下是 Heroku 的日志:
2021-04-05T00:20:09.317985+00:00 heroku[web.1]: Starting process with command `/bin/sh -c php\ artisan\ serve\ --host\=0.0.0.0\ --port\=8181`
2021-04-05T00:20:12.468981+00:00 app[web.1]: Starting Laravel development server: http://0.0.0.0:8181
2021-04-05T00:20:12.976634+00:00 app[web.1]: [Mon Apr 5 00:20:12 2021] PHP 7.4.16 Development Server (http://0.0.0.0:8181) started
2021-04-05T00:21:09.679616+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2021-04-05T00:21:09.731878+00:00 heroku[web.1]: Stopping process with SIGKILL
2021-04-05T00:21:09.829583+00:00 heroku[web.1]: Process exited with status 137
2021-04-05T00:21:09.924793+00:00 heroku[web.1]: State changed from starting to crashed
解决方案
在 Heroku 上,您需要绑定到 Heroku 在运行时提供的(动态)端口,您可以在$PORT
env 变量中找到该端口。
您不能像在本地开发环境中那样将端口硬编码为 8081(或任何其他端口)
CMD php artisan serve --host=0.0.0.0 --port=$PORT
推荐阅读
- xml - 基于同一级别的另一个子元素文本提取子元素中的文本
- flutter - 即使状态发生变化,滑块值也不会更新
- css - 如何使用css为表格中的文本部分设置不同的基线
- docker - 使用docker挂载时,绑定源路径不存在
- amazon-web-services - DynamoDB 列值每天重置为其初始值
- regex - 如何捕获其他 2 个组之间的可选组
- cmake - CMake 在构建主目录之前从子目录构建和安装共享库
- swift - AudioKit 从后台返回时创建正弦波音调
- ansible-tower - Ansible-Tower 两因素身份验证?
- java - 如何以任何顺序使用字符串和整数组合作为输入?