#laravel #docker
Вопрос:
Я получаю ошибку с моим изображением docker после создания контейнеров docker.
по команде docker-compose up-d приложение подключается к базе данных.
но когда я попытался запустить docker build-t, чтобы создать образ и запустить его, я получил 500 внутренних ошибок php_network_getaddresses: ошибка getaddrinfo:
FROM webdevops/php-nginx:7.4-alpine WORKDIR /app # Install Laravel framework system requirements (https://laravel.com/docs/8.x/deployment#optimizing-configuration-loading) RUN apk add oniguruma-dev postgresql-dev libxml2-dev RUN docker-php-ext-install bcmath ctype fileinfo json mbstring pdo_mysql pdo_pgsql tokenizer xml # Copy Composer binary from the Composer official Docker image COPY --from=composer:latest /usr/bin/composer /usr/bin/composer ENV WEB_DOCUMENT_ROOT /app/public ENV APP_ENV production # Copy existing application directory contents to the working directory COPY . . RUN composer install RUN composer install --no-interaction --optimize-autoloader --no-dev # Optimizing Configuration loading RUN php artisan config:clear # Optimizing Route loading RUN php artisan cache:clear RUN php artisan view:cache RUN chown -R application:application .
для получения дополнительной информации вот мой docker-compose.yml
version: "3.8" services: #php service php: build: context: . dockerfile: Dockerfile container_name: dtltrcy_phpv1 volumes: - .:/var/www/html - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini networks: - laravel #nginx service web server nginx: image: nginx:stable-alpine container_name: dtltrcy_nginxv1 ports: - "8080:80" volumes: - .:/var/www/html - ./nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php - mysql networks: - dataliteracyapp #mysql service mysql: image: mysql:8.0.21 container_name: dtltrcy_mysqlv1 restart: unless-stopped tty: true ports: - "3306:3306" volumes: - ./mysql:/var/lib/mysql - ./nginx/default.conf:/etc/nginx/conf.d/default.conf environment: MYSQL_DATABASE: database MYSQL_USER: ${DB_USERNAME} MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} MYSQL_ROOT_HOST: '%' SERVICE_TAGS: dev SERVICE_NAME: mysql networks: - laravel phpmyadmin: image: phpmyadmin/phpmyadmin restart: always container_name: dtltrcy_phpmyadminv1 depends_on: - mysql ports: - "8081:80" environment: PMA_HOST: mysql MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} networks: - laravel #docker networks networks: laravel:
.env
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=database DB_USERNAME=root DB_PASSWORD=secret
Я попытался изменить файл .env с помощью этих файлов.
DB_HOST=127.0.0.1 ОШИБКА -gt; SQLSTATE[HY000] [2002] Отказано в подключении
DB_HOST=ОШИБКА локального хоста -gt; SQLSTATE[HY000] [2002] Такого файла или каталога нет
DB_HOST=172.19.0.3 ОШИБКА -gt; SQLSTATE[HY000] [2002] Время ожидания операции истекло
IP-адрес контейнера с помощью docker inspect -f ‘{{диапазон.Сетевые настройки.Сети}}{{.IP-адрес}}{{конец}}’ идентификатор контейнера
Комментарии:
1. Исправлена проблема с использованием host.docker.internal в качестве DB_HOST.
Ответ №1:
Я столкнулся с аналогичной проблемой, это мой файл Dockerfile, и он отлично работает.
FROM php:8-apache WORKDIR /var/www/html # install the necessary packages RUN apt-get update -y amp;amp; apt-get install -y curl nano npm g git zip vim sudo unzip nodejs libpq-dev libicu-dev libbz2-dev libzip-dev libpng-dev libjpeg-dev libmcrypt-dev libreadline-dev libfreetype6-dev amp;amp; docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql amp;amp; docker-php-ext-install pdo pdo_pgsql pgsql amp;amp; docker-php-ext-install mysqli pdo_mysql amp;amp; docker-php-ext-enable mysqli RUN docker-php-ext-install zip bz2 intl iconv bcmath opcache calendar # copy the config file over #COPY /server/apache/ports.conf /etc/apache2/ports.conf COPY /server/apache/vhost.conf /etc/apache2/sites-available/laravel.conf #COPY 000-default.conf /etc/apache2/sites-enabled/000-default.conf #COPY 000-default.conf /etc/apache2/sites-available/000-default.conf # install composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # use custom configuration and disable built-in one #RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" RUN a2enmod rewrite RUN a2ensite laravel.conf RUN a2dissite 000-default.conf # copy over the project files COPY . /var/www/html # change ownership of the files RUN chown -R www-data:www-data /var/www RUN cd /var/www/html amp;amp; npm instal amp;amp; composer install amp;amp; php artisan optimize CMD ["/var/www/html/scripts/start-apache.sh"]
/scripts/start-apache.sh
#!/usr/bin/env bash sed -i "s/Listen 80/Listen ${PORT:-80}/g" /etc/apache2/ports.conf sed -i "s/:80/:${PORT:-80}/g" /etc/apache2/sites-enabled/* apache2-foreground "$@"
/сервер/apache/vhost.conf (хотя это не относится к вашей проблеме, это для изменения корневого каталога документа)
lt;VirtualHost *:80gt; DocumentRoot /var/www/html/public lt;Directory "/var/www/html/public"gt; DirectoryIndex index.php Options Indexes FollowSymLinks AllowOverride All Require all granted lt;/Directorygt; ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined lt;/VirtualHostgt;
докер-compose.yml
version: "2" services: laravel-app: build: context: '.' dockerfile: Dockerfile environment: - MYSQL_DATABASE=routes-db - MYSQL_ALLOW_EMPTY_PASSWORD=1 - MYSQL_PASSWORD="" container_name: laravel-app volumes: - ./:/var/www/html ports: - "8000:80" networks: - laravel-app-network depends_on: - db db: image: mysql:5.7 ports: - "3306:3306" environment: - MYSQL_DATABASE=routes-db - MYSQL_ALLOW_EMPTY_PASSWORD=1 - MYSQL_PASSWORD="" volumes: - "./db:/var/lib/mysql" networks: - laravel-app-network networks: laravel-app-network: driver: bridge volumes: mysql_data: driver: local
Если я правильно помню, это было связано либо с пакетами/библиотеками, либо с разрешениями. Проверьте линию:
RUN chown -R www-data:www-data /var/www
Это гарантирует, что у вас есть правильные разрешения.
Извините, что не смог сообщить больше подробностей.
Комментарии:
1. спасибо вам за ваши усилия. но apt предназначен для linux. Я уже исправил свою проблему с помощью host.docker.internal в DB_HOST