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



有一个ruby on 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如下所述:

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:

这就是我启动所有四个远程容器的方式:

$ docker-compose up -d
Starting proj_db_1      ... done
Starting proj_redis_1   ... done
Starting proj_mongodb_1 ... done
Starting proj_rails_1   ... done

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

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

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

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标志是遗留的,在新版本的docker引擎中,用户定义的网络不需要它。此外,在docker群部署的情况下,链接将被忽略。然而,由于Docker和Docker-compose的安装都很旧,这是故障排除中需要尝试的一件事。

相关内容

最新更新