I want to execute command bash : composer install, in my php container but i have error SQL connection. I think my container database is not loading when i build php container.
how i can mount my container php after my container database ?
My Dockerfile php with my Symfony app
FROM php:8.0-fpm
RUN apt update \
&& apt install -y zlib1g-dev g++ git libicu-dev zip libzip-dev zip \
&& docker-php-ext-install intl opcache pdo pdo_mysql \
&& pecl install apcu \
&& docker-php-ext-enable apcu \
&& docker-php-ext-configure zip \
&& docker-php-ext-install zip
WORKDIR /var/www/symfony_docker
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -sS https://get.symfony.com/cli/installer | bash
RUN mv /root/.symfony/bin/symfony /usr/local/bin/symfony
RUN git config --global user.email "you@example.com" \
&& git config --global user.name "Your Name"
COPY composer.json .
RUN composer install
COPY . .
# CMD bash -c "composer install"
My docker-compose
volumes:
db-data:
web:
services:
nginx:
image: nginx:stable-alpine
ports:
- '8000:80'
volumes:
- web:/var/www/symfony_docker
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- database
- nodejs
database:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: symfony
MYSQL_DATABASE: symfony_docker
MYSQL_USER: symfony
MYSQL_PASSWORD: symfony
ports:
- '3306'
volumes:
- db-data:/var/lib/mysql
phpmyadmin:
depends_on:
- database
image: phpmyadmin
restart: always
ports:
- 8080:80
environment:
PMA_HOST: database
php:
build:
context: ./api
ports:
- '9000:9000'
volumes:
- web:/var/www/symfony_docker
depends_on:
- database
- mercure
nodejs:
build:
context: ./app
ports:
- 3000:3000
depends_on:
- mercure
mercure:
restart: unless-stopped
image: dunglas/mercure:v0.10.4
environment:
- PUBLISHER_JWT_KEY=mercure_publisher
- SUBSCRIBER_JWT_KEY=mercure_subscriber
- CORS_ALLOWED_ORIGINS=*
- PUBLISH_ALLOWED_ORIGINS=*
- ALLOW_ANONYMOUS=1
- MERCURE_EXTRA_DIRECTIVES=cors_allowed_origins *
- SERVER_NAME=":80"
ports:
- 3001:80
I have try with depends_on and healthcheck but that do'nt work (source : Docker Compose wait for container X before starting Y)
version: "3"
volumes:
db-data:
web:
services:
nginx:
image: nginx:stable-alpine
ports:
- '8000:80'
volumes:
- web:/var/www/symfony_docker
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- database
- nodejs
database:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: symfony
MYSQL_DATABASE: symfony_docker
MYSQL_USER: symfony
MYSQL_PASSWORD: symfony
ports:
- '3306'
volumes:
- db-data:/var/lib/mysql
depends_on:
- php
links:
- php
phpmyadmin:
depends_on:
- database
image: phpmyadmin
restart: always
ports:
- 8080:80
environment:
PMA_HOST: database
php:
build:
context: ./api
ports:
- '9000:9000'
volumes:
- web:/var/www/symfony_docker
depends_on:
- mercure
command: bash -c "composer install"
healthcheck:
test: ["CMD","curl", "http://127.0.0.1:8000/api"]
interval: 30s
timeout: 10s
retries: 5
restart: on-failure
nodejs:
build:
context: ./app
ports:
- 3000:3000
depends_on:
- mercure
mercure:
restart: unless-stopped
image: dunglas/mercure:v0.10.4
environment:
- PUBLISHER_JWT_KEY=mercure_publisher
- SUBSCRIBER_JWT_KEY=mercure_subscriber
- CORS_ALLOWED_ORIGINS=*
- PUBLISH_ALLOWED_ORIGINS=*
- ALLOW_ANONYMOUS=1
- MERCURE_EXTRA_DIRECTIVES=cors_allowed_origins *
- SERVER_NAME=":80"
ports:
- 3001:80