0

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
ThomasM
  • 57
  • 5

0 Answers0