1

I am trying to install docker in a laravel project. Everything seems to work, except that when I try to import data into my comic, I get this error:

I import width command line:

docker-compose exec app php artisan db:import --local

I must also say that this is a large amount of data that I am trying to import

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")

I did research on the internet to find a solution. I saw many but none walked with me.

I use docker to create a development environment. Here are my configurations

Dockerfile

FROM php:7.1.20-fpm

# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/

# Set working directory
WORKDIR /var/www

# Install dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    mysql-client \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    unzip \
    git \
    curl

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www

# Copy existing application directory contents
COPY . /var/www

# Copy existing application directory permissions
COPY --chown=www:www . /var/www

# Change current user to www
USER www

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]

docker-compose

version: '3'
services:

  #PHP Service
  app:
    build:
      context: .
      dockerfile: .docker/Dockerfile
    env_file: .env
    image: digitalocean.com/php
    container_name: app
    #restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
    working_dir: /var/www
    volumes:
      - ./:/var/www
      - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
    networks:
      - app-network
    depends_on:
      - db
      - webserver

  #Nginx Service
  webserver:
    image: nginx:alpine
    container_name: webserver
    restart: unless-stopped
    tty: true
    ports:
      - "8000:80"
      - "443:443"
    volumes:
      - ./:/var/www
      - ./nginx/conf.d/:/etc/nginx/conf.d/
    networks:
      - app-network

  #MySQL Service
  db:
    image: mysql:5.7.22
    container_name: db
    restart: unless-stopped
    tty: true
    ports:
      - "13306:3306"
    environment:
      MYSQL_DATABASE: merchline
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - dbdata:/var/lib/mysql/
      - ./mysql/my.cnf:/etc/mysql/my.cnf
    networks:
      - app-network

#Docker Networks
networks:
  app-network:
    driver: bridge
#Volumes
volumes:
  dbdata:
    driver: local
willkoua
  • 115
  • 4
  • 12

2 Answers2

0

You need to connect to DB that running in docker container.

So you probably need to use tcp (which runs on 13306 port in your case) instead of unix socket in your PHP code.

Qteb
  • 483
  • 4
  • 14
  • thank you for your reply. Indeed, I connect to the database via the docker and it is in this situation that I have my error. My command is ```docker-compose exec app php artisan db:import --local``` – willkoua Jun 21 '19 at 16:21
0

The problem is that mysql client can't reach the virtual host for your mysql instance.

You should set that info in your Laravel's .env file.

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=13306
DB_DATABASE=merchline
DB_USERNAME=*your_mysql_user*
DB_PASSWORD=********
SmartBit
  • 30
  • 4