I’m attempting to build and run a Laravel docker image which was originally generated via Laravel sail. When using docker-compose up
, it correctly runs and I am able to access the site. Running docker build docker/7.4/ -t <tagname>
followed by docker run <tagname>
results in the following error logs however:
I have tracked this error down to my supervisord.conf file, where it is trying to call /var/www/html/artisan serve
, but is seemingly unable to resolve it.
supervisord.conf:
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80
user=sail
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
Here is also the Dockerfile I’m using, as well as the start-container script it runs
Dockerfile:
FROM ubuntu:20.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update
&& apt-get install -y gosu curl zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2
RUN apt-get install -y gnupg ca-certificates
RUN mkdir -p ~/.gnupg
&& chmod 600 ~/.gnupg
&& echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf
&& apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C
&& apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C
&& echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list
&& apt-get update
&& apt-get install -y php7.4-cli php7.4-dev
php7.4-pgsql php7.4-sqlite3 php7.4-gd
php7.4-curl php7.4-memcached
php7.4-imap php7.4-mysql php7.4-mbstring
php7.4-xml php7.4-zip php7.4-bcmath php7.4-soap
php7.4-intl php7.4-readline php7.4-pcov
php7.4-msgpack php7.4-igbinary php7.4-ldap
php7.4-redis
&& php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
&& curl -sL https://deb.nodesource.com/setup_15.x | bash -
&& apt-get install -y nodejs
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list
&& apt-get update
&& apt-get install -y yarn
&& apt-get install -y mysql-client
&& apt-get install -y postgresql-client
&& apt-get -y autoremove
&& apt-get clean
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php7.4
# RUN groupadd --force -g www-data sail
RUN useradd -ms /bin/bash --no-user-group -g www-data -u 1337 sail
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/7.4/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 8000
ENTRYPOINT ["start-container"]
start-container:
#!/usr/bin/env bash
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ];then
exec gosu $WWWUSER "$@"
else
/usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi
docker-compose.yml:
version: '3'
services:
laravel.test:
build:
context: ./docker/7.4
dockerfile: Dockerfile
args:
WWWGROUP: 'www-data'
container_name: laravel
image: sail-7.4/app
ports:
- '${APP_PORT:-80}:80'
environment:
WWWUSER: 'sail'
LARAVEL_SAIL: 1
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
mysql:
image: 'mysql:8.0'
container_name: 'mysql'
restart: 'unless-stopped'
tty: 'true'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
SERVICE_TAGS: 'dev'
SERVICE_NAME: 'mysql'
volumes:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping"]
networks:
sail:
driver: bridge
volumes:
sailmysql:
driver: local
I am fairly new to using docker, so the process is somewhat confusing to me. Any help on where to look for this or how to debug it would be greatly appreciated – as well as an explanation as to why it’s unable to resolve the php artisan command in supervisord.conf
2
Answers
Looking at your
Dockerfile
, you don’t have a copy statement which copies the your source code to the container. And in your docker compose you would would be sharing that code using volumes. Hence your code works fine indocker-compose up
. But in case ofdocker run <image>
that volume is not shared and hence the errorsimply add
COPY . /var/www/html
aboveCOPY start-container /usr/local/bin/start-container