首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法连接mysql和php

无法连接mysql和php
EN

Stack Overflow用户
提问于 2017-04-19 12:18:08
回答 1查看 124关注 0票数 1

有了这个灯对接器设置(我是一个码头新手):

docker-compose.yml

代码语言:javascript
复制
version: '2'

services:
  webserver:
    build: .
    ports:
      - "8080:80"
      - "443:443"
    volumes:
      - ./:/var/www/html
    links:
      - db
  db:
    image: mysql:5.6
    ports:
      - "3306:3306"
    volumes:
       - /var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=adminpasswd
      - MYSQL_DATABASE=se_racken_dev



phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - "88:80"
    links:
      - db:db

Dockerfile

代码语言:javascript
复制
FROM php:5.6-apache

RUN apt-get update -y && apt-get install -y libpng-dev curl libcurl4-openssl-dev

RUN docker-php-ext-install pdo pdo_mysql gd curl

RUN a2enmod rewrite
RUN service apache2 restart

只是不能让我当地的环境开始工作。

在本地主机上获得此错误消息:8088:

SQLSTATEHY000没有这样的文件或目录

我如何配置我的对接设置,以克服这个连接问题?

这里有一些提示:Adapter throws Exception: "SQLSTATE[HY000] [2002] No such file or directory"

我需要安装vim并按照上面的建议来做吗?还是我可以在我的码头文件中解决它?

EN

回答 1

Stack Overflow用户

发布于 2017-04-19 12:58:25

webserver映像中,您应该定义连接值,例如数据库的主机名、数据库名、用户名和密码。

您可以指定一个.env文件,如https://docs.docker.com/compose/env-file/中所示

就你的情况而言,这应该是:

代码语言:javascript
复制
DB_HOSTNAME=db:/var/run/mysqld/mysqld.sock
DB_USER=root
DB_PASSWORD=somepassword
DB_NAME=se_racken_dev

然后,向您的Dockerfile指定:

代码语言:javascript
复制
FROM php:5.6-apache

ENV MYSQL_HOSTNAME="localhost"
ENV MYSQL_PASSWORD=""
ENV MYSQL_USERNAME="root"
ENV MYSQL_DATABASE_NAME=""  

RUN apt-get update -y && apt-get install -y libpng-dev curl libcurl4-openssl-dev

RUN docker-php-ext-install pdo pdo_mysql gd curl

RUN a2enmod rewrite
RUN service apache2 restart

然后像这样修改您的docker-compose.yml

代码语言:javascript
复制
version: '2'

services:
  webserver:
    build: .
    ports:
      - "8080:80"
      - "443:443"
    volumes:
      - ./:/var/www/html
    links:
      - db
    environment:
     - MYSQL_HOSTNAME=$DB_HOSTNAME
     - MYSQL_PASSWORD=$DB_USER
     - MYSQL_USERNAME=$DB_PASSWORD
     - MYSQL_DATABASE_NAME=$DB_NAME

  db:
    image: mysql:5.6
    ports:
      - "3306:3306"
    volumes:
       - /var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=$DB_PASSWORD
      - MYSQL_DATABASE=$DB_NAME

phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - "88:80"
    links:
      - db:db

然后,您可以使用php的getenv从指定的环境变量中提取值。在你的例子中,getenv('MYSQL_DATABASE_NAME')将把"se_racken_dev“的值作为字符串返回。因此,您需要修改数据库配置文件,以便使用上述函数正确地恢复数据库连接凭据。

记住的一个简单方法是,无论您通过ENV在您的dockerfile中指定什么,您都可以通过getenv返回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43495538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档