2017-04-22 82 views
0

我有一个在Docker容器中运行的REST API的Symfony应用程序。MongoDB不能在Docker中使用Symfony应用程序

所有路线的作品,但是当我试图访问一个路由数据库,从数据库中添加信息或提取信息,我收到

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. 

泊坞窗,撰写文件创建的*与PHPDocker消息是

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 

*我试图添加链接到mongo图片,但不起作用。

命令结果docker-compose up

PS E:\API\web_server\code> docker-compose up 
Starting code-php-fpm 
Starting mongo 
Starting code-webserver 
Attaching to mongo, code-php-fpm, code-webserver 
mongo  | 2017-04-22T23:11:52.947+0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/ 
db 64-bit host=5c9a4a252688 
mongo  | 2017-04-22T23:11:52.947+0000 I CONTROL [initandlisten] db version v3.0.14 
mongo  | 2017-04-22T23:11:52.947+0000 I CONTROL [initandlisten] git version: 08352afcca24bfc145240a0fac9d28b978ab 
77f3 
code-php-fpm | [22-Apr-2017 23:11:52] NOTICE: fpm is running, pid 5 
mongo  | 2017-04-22T23:11:52.947+0000 I CONTROL [initandlisten] build info: Linux ip-10-30-223-232 3.2.0-4-amd64 
#1 SMP Debian 3.2.46-1 x86_64 BOOST_LIB_VERSION=1_49 
mongo  | 2017-04-22T23:11:52.947+0000 I CONTROL [initandlisten] allocator: tcmalloc 
code-php-fpm | [22-Apr-2017 23:11:52] NOTICE: ready to handle connections 
mongo  | 2017-04-22T23:11:52.947+0000 I CONTROL [initandlisten] options: { storage: { mmapv1: { smallFiles: true 
} } } 
code-php-fpm | [22-Apr-2017 23:11:52] NOTICE: systemd monitor interval set to 10000ms 
mongo  | 2017-04-22T23:11:52.959+0000 I JOURNAL [initandlisten] journal dir=/data/db/journal 
mongo  | 2017-04-22T23:11:52.959+0000 I JOURNAL [initandlisten] recover : no journal files present, no recovery n 
eeded 
mongo  | 2017-04-22T23:11:53.395+0000 I JOURNAL [durability] Durability thread started 
mongo  | 2017-04-22T23:11:53.395+0000 I JOURNAL [journal writer] Journal writer thread started 
mongo  | 2017-04-22T23:11:53.653+0000 I NETWORK [initandlisten] waiting for connections on port 27017 

登录时,我试图从应用程序访问一个简单的页面(localhost:8000) - 这是确定

code-php-fpm | 172.19.0.4 - 22/Apr/2017:23:24:52 +0000 "GET /app.php" 200

登录,当我试图访问一个网址(localhost:8000/transactions/user=invalid&day=1492453903&threshold=100)有效,但与无效数据 - 这是确定

code-php-fpm | 172.19.0.4 - 22/Apr/2017:23:23:32 +0000 "GET /app.php" 400

当我尝试接受日志时SS的URL (localhost:8000/transactions/user=100&day=1492453903&threshold=100)与来自Mongo的数据库中插入一个有效的数据有效 - 也不行

code-php-fpm | 172.19.0.4 - 22/Apr/2017: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查看数据库localhost:27017的作品。

有什么建议吗? 谢谢!

+0

500表示内部服务器错误。我想你是从Symfony丢失日志...你检查过'/ project/var/logs'吗? – saada

+0

应用程序不能连接到MongoDB。我在帖子中发布了日志。我该怎么做? –

+0

它仍然试图连接到“localhost:27017”而不是“mongo:27017”。你可以发布你的'app/config/config.yml'文件吗? – saada

回答

2

两个问题:

  1. 你的nginx的服务器,而不是PHP/symfony的服务器
  2. 您的链接也nginx的服务器上设置环境变量。 好消息是docker-compose的新版本不再要求您再使用链接。 docker-compose默认为您的项目创建桥梁网络。在这个桥接网络上运行的所有服务都可以默认连接到对方。

我摆脱了这些link块,并将环境变量从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 
+0

同样的错误。我用你的内容改变了docker-compose.yml的内容。我从Symfony发布日志。该应用没有连接到MongoDB。我该怎么做? –

+0

谢谢,萨达给你的帮助,非常感谢你! –

相关问题