我有兩個容器的docker-compose設置:一個是php/apache服務,另一個容器是數據庫(mysql)。無法通過PHP連接到docker mysql
這裏是我的搬運工,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: "%"
這裏是我的應用程序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
的主要問題是,MySQL數據庫和應用程序容器運作良好,我可以通過應用程序容器連接到mysql數據庫通過
[email protected]: mysql -h db -u myApp -p
,但是
如果我嘗試對我的symfony項目執行composer install
,出現以下錯誤消息:
[Doctrine\DBAL\Driver\PDOException]
SQLSTATE[HY000] [2002] Connection refused
[PDOException]
SQLSTATE[HY000] [2002] Connection refused
這裏是我的我的應用程序的參數:
parameters:
database_driver: pdo_mysql
database_host: db
database_port: 3306
database_name: myAppDatabase
database_user: myApp
database_password: root
爲什麼這發生? 我已閱讀了幾個論壇和網站,但沒有任何幫助。 我嘗試了以下解決方案,並沒有任何幫助:
- 結算symfony的緩存;)
- mysql的容器暴露3306
- 聯動app和mysql的容器一起
- 刪除從我的電腦的所有圖像和容器和重新安裝了所有東西
- 我在Windows和Ubuntu 17.04上試過。同樣的行爲
connecting to a docker-compose mysql container denies access but docker running same image does not
docker-compose wordpress mysql connection refused
UPDATE:
我試圖從https://gist.github.com/chales/11359952一個小PHP腳本來訪問我的數據庫。 PHP /我的腳本實際上可以連接到數據庫,所以問題必須與我的composer install
或在教條或symfony的配置中。
TL;博士
- 2泊塢容器經由塢窗構成
- 我可以通過
mysql
命令訪問該應用程序容器上的數據庫但不超過composer install
。爲什麼?
而不是'database_host:db'嘗試'database_host:foo'。錯誤應該是未知的主機。但是,如果錯誤繼續相同,問題是您的配置文件是另一個。 – Robert
@Robert我在嘗試「database_host:foo」時得到了這個:'[Doctrine \ DBAL \ Exception \ ConnectionException] 驅動程序發生異常:SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo失敗:名稱或服務未知' – Rubinum
當MySQL尚未啓動時,作曲家有沒有這麼快的速度運行? – Robert