我有一个带有两个容器的docker-compose设置:一个是PHP / apache服务,另一个容器是数据库(mysql).
这是我的docker-compose.yml
version: '2'
services:
app:
depends_on:
- db
links:
- db:@R_404_198@
build: .
image: app
ports:
- "80:80"
restart: always
links:
- db:db
volumes:
- ../:/var/www/html/
db:
image: @R_404_198@:latest
restart: unless-stopped
volumes:
- ./db_data:/var/lib/@R_404_198@
- ./databaseDumps:/tmp/databaseDumps
environment:
@R_404_198@_USER: "myApp"
@R_404_198@_PASSWORD: "root"
@R_404_198@_ROOT_PASSWORD: "root"
@R_404_198@_DATABASE: "myAppDatabase"
@R_404_198@_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 @R_404_198@-client lib@R_404_198@client-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_@R_404_198@ gd @R_404_198@i
EXPOSE 8080 80
主要问题是,@R_404_198@数据库和app容器运行良好,我可以从app容器连接到@R_404_198@数据库
$root@app: @R_404_198@ -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_@R_404_198@
database_host: db
database_port: 3306
database_name: myAppDatabase
database_user: myApp
database_password: root
为什么会这样?
我已经阅读了几个论坛和网站,但没有任何帮助.
我尝试了以下解决方案并没有任何帮助:
>清除symfony缓存;)
>在@R_404_198@容器上公开3306
>将app和@R_404_198@容器连接在一起
>从我的计算机中删除所有图像和容器并重新安装所有内容
>我试过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
更新:
我尝试使用https://gist.github.com/chales/11359952中的一个小脚本来访问我的数据库. PHP / My Script实际上可以连接到数据库,所以问题必须在我的作曲家安装或学说或symfony的配置中.
TL;博士
> 2 Docker容器通过docker撰写
>我可以通过app容器上的@R_404_198@命令访问数据库,但不能通过composer install访问.为什么?
docker inspect docker_db_1 | grep IPAddress
在我的情况下,这给了我
"SecondaryIPAddresses": null,"IPAddress": "","IPAddress": "172.18.0.2",
我使用这个IP地址(172.18.0.2)来连接而不是数据库.