首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB与Docker中的Symfony应用程序不兼容

MongoDB与Docker中的Symfony应用程序不兼容
EN

Stack Overflow用户
提问于 2017-04-22 23:19:46
回答 1查看 924关注 0票数 0

我有一个运行在Docker容器中的REST的Symfony应用程序。

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

代码语言:javascript
运行
复制
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创建的docker文件

代码语言:javascript
运行
复制
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的结果。

代码语言:javascript
运行
复制
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

当我试图访问一个有效的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

当我试图使用mongo数据库中插入的有效数据访问url (localhost:8000/transactions/user=100&day=1492453903&threshold=100)时登录--不太好

code-php-fpm | 172.19.0.4 - 22/Apr/2017:23:13:09 +0000 "GET /app.php" 500

“parameters.yml”文件

代码语言:javascript
运行
复制
# 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文件

代码语言:javascript
运行
复制
doctrine_mongodb:
    connections:
        default:
            server: "%mongodb_server%"
            options: {}
    default_database: hootsuite_database
    document_managers:
        default:
            mappings:
                DBBundle: ~

Symfony项目的日志:

代码语言:javascript
运行
复制
[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查看数据库时,效果很好。

有什么建议吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-22 23:56:10

两个问题:

  1. 在nginx服务器上而不是php/symfony服务器上设置环境变量
  2. 您的链接也在nginx服务器上。好消息是,较新版本的docker-compose不再需要您使用链接。默认情况下,docker-compose为您的项目创建一个网桥网络。默认情况下,在此桥网络上运行的所有服务都具有相互连接的能力。

我去掉了这些link块,并将环境变量从nginx移到php。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43565665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档