将Symfony2应用程序连接到Docker中的数据库容器的问题

时间:2015-03-25 16:30:03

标签: php symfony docker

我在docker项目中使用docker-compose获得了一个Symfony2应用程序。

尝试对我的数据库运行架构更新时出现以下错误。 [Doctrine\DBAL\Exception\DriverException] An exception occured in driver: SQLSTATE[HY000] [1130] Host '172.17.0.129' is not allowed to connect to this MySQL server

我的docker-compose.yml文件:

api:
  build: images/nginx
  ports:
    - "80:80"
    - "9000:9000"
  links:
    - mysql:mysql
    - memcached:memcached
    - redis:redis
    - elasticsearch:elasticsearch
    - rabbitmq:rabbitmq
  volumes:
    - www/api:/var/www
    - sites/api:/etc/nginx/sites-enabled

socketserver:
  build: images/socketserver
  links:
    - rabbitmq:rabbitmq
  ports:
    - "5000:5000"
  volumes:
    - www/socketserver:/var/www
    - sites/socketserver:/etc/nginx/sites-enabled

adminpanel:
  build: images/adminpanel
  ports: 
    - "8001:8001"
  volumes:
    - www/adminpanel:/var/www
    - sites/adminpanel:/etc/nginx/sites-enabled

mysql:
  image: mysql:latest
  expose:
    - "3306"
  ports:
   - "3307:3306"
  environment:
    MYSQL_DATABASE: api
    MYSQL_USER: root
    MYSQL_PASSWORD: [REDACTED]
    MYSQL_ROOT_PASSWORD: [REDACTED]

memcached:
  image: tutum/memcached
  ports:
    - "11211:11211"
  dns: 3.3.3.3
  environment:
    MEMCACHED_PASS: [REDACTED]

redis:
  image: tutum/redis
  ports:
    - "6379:6379"
  dns: 4.4.4.4
  environment:
    REDIS_PASS: [REDACTED]

elasticsearch:
  image: tutum/elasticsearch
  ports:
    - "9200:9200"
  dns: 5.5.5.5
  environment:
    ELASTICSEARCH_USER:[REDACTED]
    ELASTICSEARCH_PASS:[REDACTED]

rabbitmq:
  image: dockerfile/rabbitmq
  dns: 6.6.6.6
  ports: 
    - "5672:5672"
    - "15672:15672"

我的Symfony2 parameters.yml:

  parameters:
      secret:           [REDACTED]
      locale:            en
      mailer_transport:  smtp
      mailer_host:       [REDACTED]
      mailer_user:      test@theladbible.com
      mailer_password:  [REDACTED]
      database_driver:   pdo_mysql
      database_host:     mysql
      database_port:     3306
      database_name:     api
      database_user:     root
      database_password: [REDACTED]
      jms_serializer.cache_naming_strategy.class: JMS\Serializer\Naming\IdenticalPropertyNamingStrategy

我尝试过多种不同的方法。我无法通过localhost或127.0.0.1连接。把'mysql'似乎链接到数据库容器正确的数据库地址,但是我仍然得到上面显示的错误。

我是Docker的新手,所以我可能误解了一些基本原则,如果是这样的话就道歉。

我怀疑我需要添加正确的用户权限吗?我无法直接连接数据库容器来执行此操作。

提前致谢!

1 个答案:

答案 0 :(得分:4)

通过使用扩展默认mysql docker镜像的https://registry.hub.docker.com/u/drakedroid/mysql-with-data/来解决此问题,但会自动配置所有内容,以便您可以从其他容器访问它。

在parameters.yml中,将主机设置为与mysql docker名称相同的名称。

所以在我的情况下,我的mysql docker-compose config:

mysql:
  image: drakedroid/mysql-with-data
  expose:
    - "3306"
  ports:
   - "3306:3306"
  environment:
    MYSQL_DATABASE: api_master
    MYSQL_USER: root
    MYSQL_PASSWORD: [REDACTED]
    MYSQL_ROOT_PASSWORD: [REDACTED]

在我的parameters.yml

database_host:     mysql

这样Docker会自动为您解决所有问题。