无法连接MySQL和PHP
问题描述:
有了这个灯泊坞窗设置(IM一种泊坞窗新手):无法连接MySQL和PHP
泊坞窗,compose.yml
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
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:
SQLSTATE [HY000] [2002]没有这样的文件或目录
我如何配置我的泊坞窗的设置让过去这个连接问题?
我是否需要安装vim和做什么,他们建议在上面或者我可以解决它在我的搬运工文件?
答
在webserver
图像上,您应该定义连接值,例如数据库的主机名,数据库名称,用户名和密码。
你能可以是指定一个.env
文件为https://docs.docker.com/compose/env-file/
在你的情况看出,应该是:
DB_HOSTNAME=db:/var/run/mysqld/mysqld.sock
DB_USER=root
DB_PASSWORD=somepassword
DB_NAME=se_racken_dev
然后你Dockerfile
注明:
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
那样:
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”。因此,您需要修改数据库配置文件,以便使用上述函数正确地检索数据库连接凭证。
一个简单的方法是记住您在dockerfile中通过ENV
指定的任何内容,您可以通过getenv
进行检索。
Arent你缺少一个斜杠在MySQL的卷? – Webbanditten
你检查了码头日志吗? –
我认为你有权限问题。您有'services.webserver.volumes:./:/ var/www/html',它们定义了一个绑定挂载卷,因此您的目录中的内容将在容器中作为/ var/www/html使用。默认情况下,你的代码将以root身份运行在你的容器中。但是Apache HTTP服务器有不同的用户。所以你需要为Apache HTTP服务器用户编写一个'chown'脚本来读取你的'/ var/www/html'。 – andreim