2017-01-24 117 views
0

我有一个docker容器,其中运行了Rails和mongoDB。 我将mongo配置设置为使用unix套接字进行连接,因为真正需要连接的唯一资源(rails应用程序)正在容器中运行。
每当我尝试连接到mongo壳我得到这个错误:连接到Docker中的mongoDB套接字

[main] Error: network error while attempting to run command 'isMaster' on host '127.0.0.1:27017'

我有我的MongoDB配置设置是这样的:

#mongod.conf - 3.4 
    storage: 
     dbPath: "/var/lib/mongodb" 
     directoryPerDB: true 
     journal: 
      enabled: true 
    systemLog: 
     destination: file 
     path: "/var/log/mongodb/mongodb.log" 
     logAppend: true 
     timeStampFormat: iso8601-utc 
    processManagement: 
     fork: true 
    net: 
     bindIp: 127.0.0.1 
     port: 27017 
     wireObjectCheck: false 
     unixDomainSocket: 
      enabled: true 
    net: 
     ssl: 
     mode: requireSSL 
     PEMKeyFile: /etc/ssl/certs/db/mongodb.pem 


    security: 
     authorization: enabled 

有没有其他人遇到这个问题,也是?在docker容器中有没有mongoDB配置的最佳做法?

回答

1

您可能需要提供您开始使用哪个码头图像,如果它不是以mongo为中心的容器,mongo如何安装和启动?

如果你不使用这里的官方图片: https://hub.docker.com/_/mongo/ 你可以尝试将您的应用程序将其用于调试目的

例如

FROM mongo 

# System ruby 
RUN apt-get update \ 
&& apt-get install -y --no-install-recommends \ 
curl ruby \ 
&& rm -rf /var/lib/apt/lists/* 

RUN bash -l -c 'ruby -v' 

# Or Get a new version of ruby 
ENV GET_RUBY ruby-2.3.3 

RUN curl -sSL https://get.rvm.io | bash -s stable 
RUN bash -c 'source /etc/profile.d/rvm.sh && rvm install $GET_RUBY && rvm use --default $GET_RUBY' 
RUN bash -l -c 'ruby -v' 
add . /assets 

另外,作为一种最佳实践,您不应在应用程序容器中包含mongo服务。相反,启动官方并从其他容器中使用它,这里是一个来自项目的docker-compose.yml,其中有mongo:

version: '2' 
services: 
    db: 
    image: mongo 
    ports: 
     - "27017:27017" 
    web: 
    build: . 
    command: npm start 
    volumes: 
     - .:/meanshop 
    ports: 
     - "7000:7000" 
    depends_on: 
     - db 
    environment: 
     PORT: 7000 
     MONGODB_DB_URL: "mongodb://db/meanshop"