简体   繁体   中英

Docker and Symfony: Composer install does not launch

I use the Docker environment with the Symfony framework. I created my own Dockerfile and my own docker-compose.yml file. The problem is that the 'compose install' command does not run when I run the 'docker compose up' command.

Here is the code of my dockerfile:

ARG PHP_VERSION=8.1

FROM php:${PHP_VERSION}-fpm

RUN apt-get update && apt-get install -y

# Install modules
RUN apt-get install -y --no-install-recommends \
        git \
        zlib1g-dev \
        libxml2-dev \
        libzip-dev \
        libpq-dev \
        nano \
    && docker-php-ext-install \
        zip \
        intl \
        pdo \
        mysqli \
        pdo_mysql \
        opcache

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer

# Install Symfony CLI
RUN curl -sS https://get.symfony.com/cli/installer | bash
RUN mv /root/.symfony/bin/symfony /usr/local/bin/symfony

# Copy the application files
COPY . /var/www/html

# Install dependencies from composer.json
RUN composer install

# Set the default directory inside the container
WORKDIR /var/www/html

Here is the code of my yml file:

version: '3.8'

networks:
  myapp:

services:
  db:
    container_name: ${APP_NAME}-db
    image: 'mariadb:latest'
    restart: always
    ports:
      - 3306:3306
    volumes:
      - './.docker/mysql:/var/lib/mysql'
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASS}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASS}
      MYSQL_DATABASE: ${MYSQL_DB}
    networks:
      - myapp

  php:
    container_name: ${APP_NAME}-php
    build: ./docker/php
    volumes:
      - './:/var/www/html'
    environment:
      - APP_ENV=${APP_ENV}
      - APP_SECRET=${APP_SECRET}
    depends_on:
      - db
    networks:
      - myapp

  nginx:
    container_name: ${APP_NAME}-nginx
    image: 'nginx:latest'
    ports:
      - 8080:80
      #- 8443:443 # if https config
    expose:
      - 80
    volumes:
      - ./:/var/www/html
      - ./docker/nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - php
    networks:
      - myapp

  phpmyadmin:
    image: 'phpmyadmin/phpmyadmin:latest'
    container_name: ${APP_NAME}-phpmyadmin
    ports:
      - 8000:80
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASS}
    networks:
      - myapp


Do you know where the problem is? I copy well the root files (where is my composer.json file) to the container folder (/var/www/html). My files are well present when I do the command 'docker-compose exec php /bin/bash' then 'ls'.

I have the following structure:

- MY-PROJECT
    > docker/
       > nginx/
       > php 
           > Dockerfile
  .env
   composer.json
   docker-compose.yml

I tried several methods, including moving the commands into the file or putting the 'compose install' command in the.yml file, but I don't think this is the solution.

I would suggest that you move your Dockerfile to the root directory of your project and set the context to .

php:
container_name: ${APP_NAME}-php
build: .
volumes:
  - './:/var/www/html'
environment:
  - APP_ENV=${APP_ENV}
  - APP_SECRET=${APP_SECRET}
depends_on:
  - db
networks:
  - myapp

You need also to change some order inside your Dockerfile and for Symfony cli you need to change it:

RUN mv /root/.symfony5/bin/symfony /usr/local/bin/symfony

Last, if you are new on this i would suggest that you use the documentation from Symfony: https://symfony.com/doc/current/setup/docker.html

You can then adapt it on your need and add phpMyAdmin etc...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM