连接拒绝Docker、Laravel和MariaDB

7hiiyaii  于 7个月前  发布在  Docker
关注(0)|答案(1)|浏览(85)

我正在使用以下技术部署应用程序:Laravel + MariaDB + phpMyAdmin.
在Dockerfile中创建应用程序映像,在docker-compose中,所有服务都在网络中编排,通过.env中定义的环境变量,它们被称为端口和密码。
不幸的是,有一些东西不能正常工作,因为你没有访问数据库,检查每个容器的日志被使用,但他们不显示任何错误,当试图远程连接到数据库,如果我有一个连接,从一个容器ping到另一个也有一个连接,即使在应用程序容器到数据库。

.env

DB_CONNECTION=mysql
DB_HOST=database
DB_PORT=3307
DB_DATABASE=mysql
DB_USERNAME=root
DB_PASSWORD=
DB_ADMIN_PORT=8086

docker-compose.yml

version: '3'
services:
  app:
    build:
      context: .
      target: ${APP_ENV}
      dockerfile: Dockerfile
    container_name: app
    ports:
      - "${APP_PORT}:80"
    volumes:
    - /user/dir:/var/www/html
    env_file:
      - .env
    networks:
      - name_network
    depends_on:
      - database

  database:
    image: mariadb:10.5.6
    container_name: appdb
    ports:
      - "${DB_PORT}:3306"
    environment:
      MYSQL_DATABASE: mysql
      MYSQL_USER: root
      MYSQL_ALLOW_EMPTY_PASSWORD: 1
    volumes:
      - db_data:/var/lib/mysql
    env_file:
      - .env
    networks:
      - name_network

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    ports:
      - "${DB_ADMIN_PORT}:80"
    environment:
      PMA_HOST: database
      PMA_PORT: ${DB_PORT}
    env_file:
      - .env
    networks:
      - name_network

networks:
  networks:
  name_network:
    driver: bridge

volumes:
  db_data:

Dockerfile

FROM php:8.2.4-apache AS production

ENV COMPOSER_ALLOW_SUPERUSER=1

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

RUN apt-get update && apt-get install -y \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    zip \
    unzip

RUN a2enmod rewrite

RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd pdo pdo_mysql

COPY . /var/www/html
RUN chown -R www-data:www-data storage
RUN chown -R $USER:www-data /var/www/html/storage/

RUN composer clear-cache
RUN composer install --no-dev --ignore-platform-req=ext-zip --no-scripts

#RUN php artisan config:cache

EXPOSE 8085
CMD ["apache2-foreground"]

数据库.php

'mysql' => [
    'driver' => 'mysql',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_HOST', 'database'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'mysql'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
    'options' => extension_loaded('pdo_mysql') ? array_filter([
        PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    ]) : [],
],
lxkprmvk

lxkprmvk1#

您正在使用端口“3307”(env变量DB_PORT的值)进行连接,但您应该连接到端口“3306”,因为该端口是MySQL/MariaDB正在侦听容器中的URL。
在容器外部,服务实际上是由

# docker-compose.yaml
services:
  database:
    ports:
      - "${DB_PORT}:3306"

我对你的配置的建议:

# .env
DB_PORT=3306
EXPOSE_DB_PORT=3307
# docker-compose.yaml
services:
  database:
    ports:
      - "${EXPOSE_DB_PORT}:3306"

和您的database.php

相关问题