簡體   English   中英

Symfony無法連接到MySQL Docker容器

[英]Symfony can't connect to MySQL Docker container

我在Mac OS sierra上運行了三個Docker容器,分別是webmysqlmongo ,並將mongomysql都鏈接到了web ,這實際上是Ubuntu Xenail的基礎,並添加了Apache和PHP。

我目前正在將本地的Symfony項目安裝到web容器中,這似乎運行良好,但是當我嘗試以任何方式與數據庫進行交互時,都會得到:

驅動程序中發生異常:SQLSTATE [HY000] [2002]連接被拒絕

我嘗試了幾乎所有參數值的組合,但仍得到相同的結果。

我懷疑這可能與我鏈接容器的方式有關嗎?

我正在學習Docker,請原諒我有限的知識。

謝謝!

Web dockerfile:

FROM ubuntu:xenial
MAINTAINER Some Guy <someguy@domain.com>

RUN apt-get update && apt-get install -y \
apache2 \
vim \
php \
php-common \
php-cli \
php-curl \
php-mysql \
php-mongodb \
libapache2-mod-php \
php-gd

RUN mkdir -p /var/www/symfony.local/public_html
RUN chown -R $USER:$USER /var/www/symfony.local/public_html

RUN chmod -R 755 /var/www

COPY config/php/php.ini /usr/local/etc/php/
COPY config/apache/sites-available/*.conf /etc/apache2/sites-available/

RUN a2enmod rewrite

RUN a2dissite 000-default.conf
RUN a2ensite symfony.local.conf

EXPOSE  80

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

MySQL的docker文件:

FROM mysql:5.7
MAINTAINER Some Guy <someguy@domain.com>

# Set the root users password
ENV MYSQL_ROOT_PASSWORD password

# Copy over the DB dump to be run upon creation
COPY sql/ /docker-entrypoint-initdb.d

# Copy over the custom mysql config file
COPY config/ /etc/mysql/conf.d

EXPOSE 3306

運行命令:

docker run --name mongo -d mongo #Im making use of the official Mongo image
docker run --name mysql -v /usr/local/var/mysql:/var/lib/mysql -d someguy/local:mysql
docker run --name web -d -p 80:80 --link mysql:mysql --link mongo:mongo -v ~/Sites/symfony.local/:/var/www/symfony.local/public_html/ someguy/local:web

Symfony parameters.yml文件:

parameters:
    database_host: mysql
    database_port: 3306
    database_name: gorilla
    database_user: root
    database_password: password

更新:

所以我已經轉移到使用docker-compose ,但是仍然收到相同的錯誤。

docker-compose.yml文件

version: "2"
services:
  web:
    build: ./web
    ports:
      - "80:80"
    volumes:
      - ~/Sites/symfony.local/:/var/www/symfony.local/public_html/
    depends_on:
      - db
      - mongo
  mongo:
    image: mongo:latest
  mysql:
    image: mysql:latest
    ports:
        - "3306:3306"
    environment:
        MYSQL_ROOT_PASSWORD: password

驅動程序中發生異常:SQLSTATE [HY000] [2002]連接被拒絕

意思是,它與您的網絡本身無關-鏈接很好。

您缺少的是如何創建用戶,如果已創建用戶https://github.com/docker-library/mysql/blob/c207cc19a272a6bfe1916c964ed8df47f18479e7/5.7/docker-entrypoint.sh#L122 ..實際上本身沒有主機限制。

您遇到的問題是,“ sql /”文件夾中的內容是什么-這些腳本在入口點期間執行。

確保切勿在這些腳本中使用exitX,它們會中斷主腳本,請參閱https://github.com/docker-library/mysql/blob/c207cc19a272a6bfe1916c964ed8df47f18479e7/5.7/docker-entrypoint.sh#L151

檢查docker日志中是否存在mysql,以確保腳本未向您顯示任何警告,請使用https://github.com/docker-library/mysql/blob/c207cc19a272a6bfe1916c964ed8df47f18479e7/5.7/docker-entrypoint.sh作為參考。

最后但並非最不重要的一點,請使用docker-compose 如果您在計時方面遇到問題(mysql開始變慢並且您的Web容器出現異常),請在Web中使用“ wait for mysql”入口點:

#!/bin/bash
# this script does only exist to wait for the database before we fire up tomcat / standalone

RET=1
echo "Waiting for database"
while [[ RET -ne 0 ]]; do
    sleep 1;
    if [ -z "${db_password}" ]; then
        mysql -h $db_host -u $db_user -e "select 1" > /dev/null 2>&1; RET=$?
    else
        mysql -h $db_host -u $db_user -p$db_password -e "select 1" > /dev/null 2>&1; RET=$?
    fi
done

使用ENV或任何適合您的方法相應地設置db_host$user$pasword

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM