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

我有一个在Docker容器中运行的REST API的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. 

docker -compose文件是用PHPDocker创build的

 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结果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)时logging日志 – 没关系

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

当我尝试访问一个url (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

logging当我试图访问一个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)"} [] 

当我尝试使用localhost:27017上的Robomongo查看数据库localhost:27017作品。

有什么build议? 谢谢!

两个问题:

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

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