Rub*_*num 8 php mysql symfony docker docker-compose
我有一个带有两个容器的docker-compose设置:一个是php/apache服务,另一个容器是数据库(mysql).
这是我的docker-compose.yml
version: '2'
services:
app:
depends_on:
- db
links:
- db:mysql
build: .
image: app
ports:
- "80:80"
restart: always
links:
- db:db
volumes:
- ../:/var/www/html/
db:
image: mysql:latest
restart: unless-stopped
volumes:
- ./db_data:/var/lib/mysql
- ./databaseDumps:/tmp/databaseDumps
environment:
MYSQL_USER: "myApp"
MYSQL_PASSWORD: "root"
MYSQL_ROOT_PASSWORD: "root"
MYSQL_DATABASE: "myAppDatabase"
MYSQL_ROOT_HOST: "%"
Run Code Online (Sandbox Code Playgroud)
这是我的应用程序Dockerfile:
FROM php:7-apache
COPY prefilled_files/000-default.conf /etc/apache2/sites-available/000-default.conf
RUN apt-get -qq update
RUN apt-get -qq -y install libpng-dev curl git nano vim zip unzip mysql-client libmysqlclient-dev
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get install -y nodejs
RUN npm install -g bower
RUN npm install -g gulp
RUN docker-php-ext-install pdo pdo_mysql gd mysqli
EXPOSE 8080 80
Run Code Online (Sandbox Code Playgroud)
主要问题是,mysql数据库和app容器运行良好,我可以通过app容器连接到mysql数据库
$root@app: mysql -h db -u myApp -p
Run Code Online (Sandbox Code Playgroud)
但
如果我尝试composer install在我的symfony项目上执行,则会出现以下错误消息:
[Doctrine\DBAL\Driver\PDOException]
SQLSTATE[HY000] [2002] Connection refused
[PDOException]
SQLSTATE[HY000] [2002] Connection refused
Run Code Online (Sandbox Code Playgroud)
以下是我的应用参数:
parameters:
database_driver: pdo_mysql
database_host: db
database_port: 3306
database_name: myAppDatabase
database_user: myApp
database_password: root
Run Code Online (Sandbox Code Playgroud)
为什么会这样? 我已阅读了几个论坛和网站,但没有任何帮助.我尝试了以下解决方案并没有任何帮助:
连接到docker-compose的mysql容器拒绝访问但是运行相同图像的docker却没有
docker-compose wordpress mysql连接拒绝
更新:
我尝试使用https://gist.github.com/chales/11359952上的一些PHP脚本访问我的数据库.PHP/My Script实际上可以连接到数据库,因此问题必须与我composer install或在学说或我的symfony配置中.
TL;博士
mysqlapp容器上的命令访问数据库但不能结束composer install.为什么?我认为这是它试图通过主机名'db'找到容器的方式,我发现在运行docker的机器上,它似乎没有拿起客户容器的名称(可能是一些DNS配置你可以改变)但我解决它的方法是找到MySQL容器的IP地址.我有docker_db_1作为MySQL的容器名称,所以我运行(假设*nix)
docker inspect docker_db_1 | grep IPAddress
Run Code Online (Sandbox Code Playgroud)
在我的情况下,这给了我
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.18.0.2",
Run Code Online (Sandbox Code Playgroud)
我使用这个IP地址(172.18.0.2)来连接而不是数据库.
| 归档时间: |
|
| 查看次数: |
2970 次 |
| 最近记录: |