Php MongoDB不能在Docker中使用Symfony应用程序
我有一个Symfony应用程序,用于在Docker容器中运行的RESTAPI 所有路由都可以工作,但当我尝试访问一个路由以在数据库中添加信息或从数据库中提取信息时,我会收到消息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
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