首页 > 解决方案 > 使用 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

标签: laraveldockerheroku

解决方案


在 Heroku 上,您需要绑定到 Heroku 在运行时提供的(动态)端口,您可以在$PORTenv 变量中找到该端口。
不能像在本地开发环境中那样将端口硬编码为 8081(或任何其他端口)

CMD php artisan serve --host=0.0.0.0 --port=$PORT

推荐阅读