Php MongoDB不能在Docker中使用Symfony应用程序

Php MongoDB不能在Docker中使用Symfony应用程序,php,mongodb,symfony,docker,docker-compose,Php,Mongodb,Symfony,Docker,Docker Compose,我有一个Symfony应用程序,用于在Docker容器中运行的RESTAPI 所有路由都可以工作,但当我尝试访问一个路由以在数据库中添加信息或从数据库中提取信息时,我会收到消息 Oops! An Error Occurred The server returned a "500 Internal Server Error". Something is broken. Please let us know what you were doing when this error occurred

我有一个Symfony应用程序,用于在Docker容器中运行的RESTAPI

所有路由都可以工作,但当我尝试访问一个路由以在数据库中添加信息或从数据库中提取信息时,我会收到消息

Oops! An Error Occurred

The server returned a "500 Internal Server Error".

Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.
docker compose文件创建*使用的是

*我试图添加到mongo图像的链接,但没有成功

docker compose命令的结果

当我试图从应用程序访问一个简单的页面localhost:8000时,记录日志-没问题

代码php fpm | 172.19.0.4-2017年4月22日:23:24:52+0000 GET/app.php 200

尝试访问url localhost时记录:8000/transactions/user=invalid&day=1492453903&threshold=100有效但数据无效-没问题

代码php fpm | 172.19.0.4-2017年4月22日:23:23:32+0000 GET/app.php 400

尝试访问url localhost时的日志:8000/transactions/user=100&day=1492453903&threshold=100有效,并且在mongo数据库中插入有效数据-不正常

代码php fpm | 172.19.0.4-2017年4月22日:23:13:09+0000 GET/app.php 500

“parameters.yml”文件

# This file is auto-generated during the composer install
parameters:
    database_host: 127.0.0.1
    database_port: null
    database_name: symfony
    database_user: root
    database_password: null
    mailer_transport: smtp
    mailer_host: 127.0.0.1
    mailer_user: null
    mailer_password: null
    secret: ThisTokenIsNotSoSecretChangeIt
    mongodb_server: 'mongodb://mongo:27017'
config.yml文件包含

doctrine_mongodb:
    connections:
        default:
            server: "%mongodb_server%"
            options: {}
    default_database: hootsuite_database
    document_managers:
        default:
            mappings:
                DBBundle: ~
来自Symfony项目的日志:

[2017-04-23 07:03:25] request.INFO: Matched route "db_transaction_gettransactions". {"route":"db_transaction_gettransactions","route_parameters":{"_controller":"DBBundle\\Controller\\TransactionController::getTransactionsAction","_route":"db_transaction_gettransactions"},"request_uri":"http://localhost:8000/transactions/?day=1492453903&threshold=123&user=500","method":"GET"} []
[2017-04-23 07:03:25] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2017-04-23 07:03:25] request.CRITICAL: Uncaught PHP Exception MongoConnectionException: "Failed to connect to: localhost:27017: Connection refused" at /application/vendor/doctrine/mongodb/lib/Doctrine/MongoDB/Connection.php line 282 {"exception":"[object] (MongoConnectionException(code: 71): Failed to connect to: localhost:27017: Connection refused at /application/vendor/doctrine/mongodb/lib/Doctrine/MongoDB/Connection.php:282)"} []
当我尝试在本地主机上使用Robomongo查看数据库时:27017起作用

有什么建议吗? 谢谢

两个问题:

您正在nginx服务器而不是php/symfony服务器上设置环境变量 您的链接也位于nginx服务器上。 好消息是docker compose的新版本不再要求您使用链接。docker compose默认情况下为项目创建桥接网络。默认情况下,此网桥网络上运行的所有服务都可以相互连接。 我去掉了这些链接块,并将环境变量从nginx移动到php

version: "3.1"
services:
  mongo:
    image: mongo:3.0
    container_name: mongo
    command: mongod --smallfiles
    expose:
      - 27017

  webserver:
    tty: true
    image: phpdockerio/nginx:latest
    container_name: code-webserver
    working_dir: /application
    volumes:
        - .:/application
        - ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
    - "8000:80"

  php-fpm:
    build:
      context: .
      dockerfile: phpdocker/php-fpm/Dockerfile
    container_name: code-php-fpm
    ### MOVE ENVIRONMENT VARIABLES HERE
    environment:
      SYMFONY__MONGO_ADDRESS: mongo
      SYMFONY__MONGO_PORT: 27017
    working_dir: /application
    volumes:
      - .:/application
      - ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php5/fpm/conf.d/99-overrides.ini

500表示内部服务器错误。我想你丢失了Symfony的日志。。。您是否检查了/project/var/logs?应用程序未连接到MongoDB。我把日志邮寄出去了。我该怎么做?它仍在尝试连接到localhost:27017而不是mongo:27017。你能发布你的app/config/config.yml文件吗?如果robomongo为你工作,那可能意味着你有两个mongodb服务在运行。一个在主机上,另一个在容器中。无论如何,为了让PHP访问mongo,您需要告诉您的框架Symfony,mongo主机名为mongo,而不是localhostmongodb://localhost:27017“到”mongodb://mongo:27017'并再次创建了容器,但错误仍然存在。我应该换个地方吗?同样的错误。我用docker-compose.yml更改了您的内容。我发布了Symfony的日志。应用程序未连接到MongoDB。我怎么能做到?
[2017-04-23 07:03:25] request.INFO: Matched route "db_transaction_gettransactions". {"route":"db_transaction_gettransactions","route_parameters":{"_controller":"DBBundle\\Controller\\TransactionController::getTransactionsAction","_route":"db_transaction_gettransactions"},"request_uri":"http://localhost:8000/transactions/?day=1492453903&threshold=123&user=500","method":"GET"} []
[2017-04-23 07:03:25] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2017-04-23 07:03:25] request.CRITICAL: Uncaught PHP Exception MongoConnectionException: "Failed to connect to: localhost:27017: Connection refused" at /application/vendor/doctrine/mongodb/lib/Doctrine/MongoDB/Connection.php line 282 {"exception":"[object] (MongoConnectionException(code: 71): Failed to connect to: localhost:27017: Connection refused at /application/vendor/doctrine/mongodb/lib/Doctrine/MongoDB/Connection.php:282)"} []
version: "3.1"
services:
  mongo:
    image: mongo:3.0
    container_name: mongo
    command: mongod --smallfiles
    expose:
      - 27017

  webserver:
    tty: true
    image: phpdockerio/nginx:latest
    container_name: code-webserver
    working_dir: /application
    volumes:
        - .:/application
        - ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
    - "8000:80"

  php-fpm:
    build:
      context: .
      dockerfile: phpdocker/php-fpm/Dockerfile
    container_name: code-php-fpm
    ### MOVE ENVIRONMENT VARIABLES HERE
    environment:
      SYMFONY__MONGO_ADDRESS: mongo
      SYMFONY__MONGO_PORT: 27017
    working_dir: /application
    volumes:
      - .:/application
      - ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php5/fpm/conf.d/99-overrides.ini