I am new to Docker and WebSockets. I am using docker in my one of the laravel project. I have followed steps from the following link to setup dockerlaravel+docker. Also, I installed WebSockets from this link. My docker is running successfully after following the steps.
Now I want WebSockets to run automatically when the docker container starts. For it, I have added following code to supervisord-app.conf
[program:websockets]
command=/usr/bin/php /var/www/html/websocket-service/artisan websockets:serve
numprocs=1
autostart=true
autorestart=true
user=www-data-new
Following is my app.dockerfile
FROM php:7-fpm-alpine
RUN apk --update add wget \
curl \
git \
grep \
build-base \
libmemcached-dev \
libmcrypt-dev \
libxml2-dev \
imagemagick-dev \
pcre-dev \
libtool \
make \
autoconf \
g++ \
cyrus-sasl-dev \
libgsasl-dev \
supervisor
RUN docker-php-ext-install mysqli pdo pdo_mysql tokenizer xml
RUN pecl channel-update pecl.php.net \
&& pecl install memcached \
&& pecl install imagick \
&& pecl install mcrypt-1.0.3 \
&& docker-php-ext-enable memcached \
&& docker-php-ext-enable imagick \
&& docker-php-ext-enable mcrypt
RUN rm /var/cache/apk/* && \
mkdir -p /var/www
COPY supervisord-app.conf /etc/supervisord.conf
ENTRYPOINT ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]
Following is my docker-compose.yml file
version: '2'
services:
app:
build:
context: ./
dockerfile: app.dockerfile
working_dir: /var/www/html
volumes:
- ./:/var/www/html
environment:
- DB_PORT=${DB_PORT}
- DB_HOST=${DB_HOST}
web:
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www/html
volumes_from:
- app
ports:
- 8080:80
database:
image: mysql:5.7
volumes:
- dbdata:/var/lib/mysql
environment:
- MYSQL_DATABASE=${DB_DATABASE}
- MYSQL_USER=${DB_USERNAME}
- MYSQL_PASSWORD=${DB_PASSWORD}
- MYSQL_ROOT_PASSWORD=
ports:
- 33061:3306
volumes:
dbdata:
Docker runs successfully but my WebSocket server does not start with it. Can anyone help me how to do it?
You can separate your two container like:
app.dockerfile:
FROM php:7-cli-alpine
RUN apk --update add wget \
curl \
git \
grep \
build-base \
libmemcached-dev \
libmcrypt-dev \
libxml2-dev \
imagemagick-dev \
pcre-dev \
libtool \
make \
autoconf \
g++ \
cyrus-sasl-dev \
libgsasl-dev
RUN docker-php-ext-install mysqli pdo pdo_mysql tokenizer xml
RUN pecl channel-update pecl.php.net \
&& pecl install memcached \
&& pecl install imagick \
&& pecl install mcrypt-1.0.3 \
&& docker-php-ext-enable memcached \
&& docker-php-ext-enable imagick \
&& docker-php-ext-enable mcrypt
RUN rm /var/cache/apk/* && \
mkdir -p /var/www
ENTRYPOINT ["/usr/bin/php", "/var/www/html/websocket-service/artisan", "websockets:serve"]
I have changed at the top of the file php:7-fpm-alpine
because in this case you just need to run a command and not to run the php-fpm server which serve the web requests
web.dockerfile:
FROM php:7-fpm-alpine
RUN apk --update add wget \
curl \
git \
grep \
build-base \
libmemcached-dev \
libmcrypt-dev \
libxml2-dev \
imagemagick-dev \
pcre-dev \
libtool \
make \
autoconf \
g++ \
cyrus-sasl-dev \
libgsasl-dev
RUN docker-php-ext-install mysqli pdo pdo_mysql tokenizer xml
RUN pecl channel-update pecl.php.net \
&& pecl install memcached \
&& pecl install imagick \
&& pecl install mcrypt-1.0.3 \
&& docker-php-ext-enable memcached \
&& docker-php-ext-enable imagick \
&& docker-php-ext-enable mcrypt
RUN rm /var/cache/apk/* && \
mkdir -p /var/www
Here you can let the ENTRYPOINT
directive which is setup by the base container php:7-fpm-alpine
[EDIT 1]
You can also refer to my old school project: ExoSuite/exosuite-docker
and more precisely to: docker-compose.dev.yml in this docker-compose file Laravel Horizon
is run by his container laravel-artisan so this file can help you as an example for your problem.
[EDIT 2]
If you want to your 6001
port to be accessed outside of your app
container modify you app directive as follows:
app:
build:
context: ./
dockerfile: app.dockerfile
working_dir: /var/www/html
volumes:
- ./:/var/www/html
ports:
- "6001:6001"
environment:
- DB_PORT=${DB_PORT}
- DB_HOST=${DB_HOST}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With