Развертывание Docker PHP + Apache в Heroku дает сбой

2

Я новичок в Heroku. Я пытаюсь развернуть докер-контейнер, и хотя я пробовал несколько вариантов, он всегда вылетает. На локальных в работает нормально, на порте 8080.

Прямо сейчас я использую PHP + Apache.

Моя папка выглядит так:

docker-compose.yml
Dockerfile 
www
   .htaccess
   index.php

Мой Dockerfile вот этот:

FROM php:7.1-apache
COPY www /var/www/html
RUN a2enmod rewrite
RUN a2enmod lbmethod_byrequests
RUN service apache2 restart
EXPOSE 80
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Мой docker-composer.yml:

version: '3'
services:
  web:
    build:
      context: .
      dockerfile: ./Dockerfile
    image: myproject
    ports:
      - 8080:80

И .htaccess:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

Когда я проверяю логи Heroku (логи герою --tail), вот что я вижу:

Starting process with command '/usr/sbin/apache2ctl -D FOREGROUND'
State changed from starting to crashed
Process exited with status 1
(13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
Action '-D FOREGROUND' failed.
Теги:
docker
deployment
heroku

2 ответа

3
Лучший ответ

Недавно я решил эту проблему сам здесь в случае, если вы когда - либо хотите попробовать еще раз Heroku :)

По сути, я использовал оператор Docker CMD для изменения настроек портов Apache во время выполнения.

CMD sed -i "s/80/$PORT/g" /etc/apache2/sites-enabled/000-default.conf /etc/apache2/ports.conf && docker-php-entrypoint apache2-foreground
  • 1
    Вы также можете использовать ${PORT} внутри файлов 000-default.conf и ports.conf . например, Listen ${PORT}
0

Ответ прост, вы не можете привязать к определенному порту, вы должны использовать переменную $ PORT env. Подробнее об этой теме здесь.

  • 0
    Здравствуй! Спасибо за Ваш ответ. Я пробовал разные варианты, но не повезло. Я удалил: EXPOSE 80 и добавил: ENV PORT "$ PORT" EXPOSE $ {PORT}, но heroku все еще говорит мне ту же ошибку. :(
  • 0
    Я наконец решил пойти с Google Cloud. Все работало как шарм.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню