首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Docker编写mongodb和rails应用程序

问理解Docker编写mongodb和rails应用程序
EN

Stack Overflow用户
提问于 2021-03-14 20:36:09
回答 1查看 355关注 0票数 1

有rails应用程序,它使用mongodb和postgresql数据库。当我在本地运行时,一切都正常,但是当我试图在远程容器中打开时,它会抛出错误消息。

2021-03-14T20:22:27.985+0000 Failed: error connecting to db server: no reachable servers

docker-compose.yml文件定义了以下服务:

redis mongodb db rails

我使用以下命令启动远程容器:

docker-compose build -成功构建

docker-compose up -d -容器已经启动并运行

当我连接到rails容器并尝试执行

bundle exec rake aws:restore_db

引发上述错误。我不知道这是怎么回事。mongodb容器已经启动并正在运行。

下面介绍了docker-compose.yml:

代码语言:javascript
复制
version: '3.4'
services:
  redis:
    image: redis:5.0.5
  mongodb:
    image: mongo:3.6.13
    volumes:
      - mongo-data:/data/db
  db:
    image: postgres:11.3
    volumes:
      - db-data:/var/lib/postgresql/data
  rails:
    build: .
    image: proj:latest
    depends_on:
      - db
      - mongodb
      - redis
    volumes:
      - .:/proj
    ports:
      - "3000:3000"
    tty: true
    stdin_open: true
    env_file:
      - .env/development.env
volumes:
  db-data:
  mongo-data:

这是我如何启动所有四个远程容器:

代码语言:javascript
复制
$ docker-compose up -d
Starting proj_db_1      ... done
Starting proj_redis_1   ... done
Starting proj_mongodb_1 ... done
Starting proj_rails_1   ... done

请帮助我理解远程容器应该如何相互交互。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-15 09:00:30

您的配置应该按名称指向服务,而不是指向本地主机上的端口。例如,如果您使用localhost:6380或127.0.0.1:6380连接到127.0.0.1:6380,那么现在需要使用redis:6380

如果这仍然没有帮助,您可以尝试添加容器之间的链接,以便将它们的名称作为服务解析。所以这个文件看起来是这样的:

代码语言:javascript
复制
version: '3.4'
services:
  redis:
    image: redis:5.0.5
    networks:
      - front-end
    links:
      - "mongodb:mongodb"
      - "db:db"
      - "rails:rails"
  mongodb:
    image: mongo:3.6.13
    volumes:
      - mongo-data:/data/db
    networks:
      - front-end
    links:
      - "redis:redis"
      - "db:db"
      - "rails:rails"
  db:
    image: postgres:11.3
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - front-end
    links:
      - "redis:redis"
      - "mongodb:mongodb"
      - "rails:rails"
  rails:
    build: .
    image: proj:latest
    depends_on:
      - db
      - mongodb
      - redis
    volumes:
      - .:/proj
    ports:
      - "3000:3000"
    tty: true
    stdin_open: true
    env_file:
      - .env/development.env
    networks:
      - front-end
    links:
      - "redis:redis"
      - "mongodb:mongodb"
      - "db:db"
volumes:
  db-data:
  mongo-data:

networks:
  front-end:

链接将允许在容器中定义主机名。

link标志是遗留的,在新版本的停靠引擎中,用户定义的网络不需要link标志。此外,在码头群部署的情况下,这些链接将被忽略。但是,由于存在码头和码头组合的老安装,所以在故障排除中这是一件值得尝试的事情。

。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66629293

复制
相关文章

相似问题

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