Я новичок в 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.
Недавно я решил эту проблему сам здесь в случае, если вы когда - либо хотите попробовать еще раз 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
Ответ прост, вы не можете привязать к определенному порту, вы должны использовать переменную $ PORT env. Подробнее об этой теме здесь.
${PORT}
внутри файлов000-default.conf
иports.conf
. например,Listen ${PORT}