当前位置: 首页 > 知识库问答 >
问题:

MariaDB Docker错误2002当试图连接到数据库从应用程序

鲍飞星
2023-03-14

我有一个问题,我的应用程序,当尝试从php应用程序在cli数据库连接我收到这个错误:

错误2002(HY000):无法通过套接字“/var/run/mysqld/mysqld”连接到本地MySQL服务器。袜子(111)

当我运行网站时,我得到:

[2002]连接拒绝(SQL:从会话中选择*,其中id=TKks6w5zbHk8bZsm6BEgFyKLJGXj05eyYHQfJsaB限制1)

我用docker compose设置了docker图像。yml和。Dockerfile还提供了带有应用程序的nginx文件夹。conf和mysql文件夹与我的。cnf我会把这些放在这里

version: '3.4'

services:
  mariadb: 
    image: mariadb/server:latest
    container_name: db
    restart: unless-stopped
    tty: true
    ports: 
      - "3306:3306"
    environment:
      MYSQL_DATABASE: PiApp
      MYSQL_ROOT_PASSWORD: rootpass
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes: 
      - dbdata:/var/lib/mysql/
      - .\mysql/my.cnf:/etc/mysql/my.cnf
    networks: 
      - Pi-Wallet-Network

  phpmyadmin: 
    image: phpmyadmin/phpmyadmin
    ports:
      - "8080:80"
    restart: unless-stopped
    environment:
      - PMA_HOST=mariadb
    links:
      - mariadb
    networks: 
      - Pi-Wallet-Network

  app:
    image: php:7.4-fpm
    build:
      context: .
      dockerfile: ./Dockerfile
    environment:
      NODE_ENV: production
      SERVICE_NAME: app
      SERVICE_TAGS: dev
    working_dir: /var/www
    volumes:
      - .\:/var/www
      - .\php/local.ini:/usr/local/etc/php/conf.d/local.ini
    links:
      - mariadb
    networks:
      - Pi-Wallet-Network

  webserver:
    image: nginx:latest
    container_name: webserver 
    tty: true
    ports: 
      - "80:80"
      - "443:443"
    volumes:
      - .\:/var/www
      - .\nginx/conf.d/:/etc/nginx/conf.d/
    links:
      - mariadb
    networks:
      - Pi-Wallet-Network

networks:
  Pi-Wallet-Network:
    driver: bridge

volumes:
  dbdata:
   driver: local

我的Dockerfile:

FROM php:7.4-fpm
# FROM mariadb/server:latest

# Copy composer.lock and composer.json into the working directory
COPY composer.lock composer.json /var/www/

# Set working directory
WORKDIR /var/www/

# Install dependencies for the operating system software
RUN printf '#!/bin/sh\nexit 0' > /usr/sbin/policy-rc.d
RUN apt-get update && apt-get upgrade -y 
RUN apt-get install -y mariadb-server 
RUN apt-get install -y build-essential 
RUN apt-get install -y libpng-dev
RUN apt-get install -y libjpeg-dev
RUN apt-get install -y libjpeg62-turbo-dev
RUN apt-get install -y libfreetype6-dev 
RUN apt-get install -y locales 
RUN apt-get install -y zip 
RUN apt-get install -y jpegoptim optipng pngquant gifsicle 
RUN apt-get install -y vim 
RUN apt-get install -y libzip-dev 
RUN apt-get install -y unzip 
RUN apt-get install -y git 
RUN apt-get install -y libonig-dev 
RUN apt-get install -y curl

# Install extensions for php
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-install gd

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

# Copy existing application directory contents to the working directory
COPY . /var/www/

# Assign permissions of the working directory to the www-data user
# RUN chown -R www-data:www-data /var/www/*
RUN chown -R www-data:www-data /var/www//storage

# Expose port 9000 and start php-fpm server (for FastCGI Process Manager)
EXPOSE 9000
CMD ["php-fpm"]

共有1个答案

严亮
2023-03-14

我通过将DB_HOST=127.0.0.1更改为DB_HOST=host.docker.internal

就像这个问题

 类似资料:
  • 问题内容: 我正在研究将由学校使用的应用程序。每所学校将建立自己的数据库。每个学校都会为应用程序提供自己的“设置”文件。设置文件将包含创建设置文件的特定学校的数据库URL。这样一来,使用该应用程序的学生如果想连接到其他数据库,就只能加载其他设置文件。 我的问题是,如何保护用于连接数据库的用户名和密码?因此,只有应用程序具有对数据库的读写访问权限。应用程序仅具有该特定学校的读写权限吗? 如果您需要更

  • 问题内容: 我正在尝试使用以下脚本连接数据库(cxn-test.php) 当我在终端上尝试时 php cxn-test.php //成功 但是当我尝试在本地主机上时,出现以下错误, curl -s http://localhost/cxn-test.php 这是一个奇怪的问题,它无法在localhost上运行,但在命令行上运行良好。 问题答案: 在获得运行SELinux的新CentOS 7盒后,我

  • 我在PHP8中有Azure web应用程序,希望从php代码连接到Oracle数据库12C。从文档中,我发现下面的博客说我们需要Oracle Instant Client,但我没有找到安装步骤。在这个博客中,他们提到php版本高达5.6,但我使用的是PHP8版本。 https://docs.microsoft.com/en-us/archive/blogs/azureossds/access-or

  • 我已使用WebForms从VS-2019成功发布Azure应用服务。我已成功保护它,以便用户必须使用与应用服务相同域中的Azure AAD帐户登录。我已成功创建AzureSQL数据库。我已成功将AAD域中的用户添加到数据库中,并通过将我创建的Azure AAD帐户用户之一硬编码到连接字符串中,从Azure应用服务中连接到数据库。 现在,我想使用应用程序服务登录名中经过身份验证的AAD用户连接到Az

  • 问题内容: 我正在为我的三年级项目编写应用程序。该应用程序将需要与外部mySQL数据库进行交互。该应用程序将从数据库中检索数据,并在ListView中将其显示给用户。 我对应用程序将要具有的功能有很好的了解。我也花了很多时间使用ListViews和本地SQLite数据库。我还对HttpUrlConnection类做了一些重新研究。 我只是想知道有人能为我提供更多有关如何访问此外部数据库的指导吗?

  • 我想用“OpenOrCreateDatabase”创建一个SQLLite数据库。问题是,我在创建一个新表时出现了一个错误。 这是我的代码: 怎么了? 多谢!