我正在尝试在Docker容器中运行我的简单Ruby应用程序(我是Windows 10用户)。这只是一堆在Mongo数据库上运行的Ruby和bash脚本。我正在docker-compose
组成3个容器-一个用于mongo数据库(使用官方mongo映像),一个用于我的应用程序,一个用于填充数据库。
然后我运行docker-compose build
并docker-compose up
命令。Mongo可以很好地唤醒,并接受数据导入。然后,我打开另一个Powershell窗口并运行docker run -it <name> /bin/bash
以获取交互式Shell并运行我的脚本。不幸的是,由于某种原因,他们无法连接到mongo。
我的连接字符串如下所示:
@client = Mongo::Client.new([ 'mongodb:27017' ], :database => 'test')
我尝试了不同版本的它,像mongodb
,mongodb://mongodb:27017
,mongodb://mongo:27017'
但似乎没有任何工作。当我运行脚本时,它会运行几秒钟,然后在我对数据库执行任何操作的第一行给出错误。Mongo没有显示任何连接尝试。
我究竟做错了什么?
Docker文件
FROM ruby:2.5
WORKDIR /usr/src/app
COPY Gemfile Gemfile.lock ./
RUN bundle install
COPY . .
Mongo种子Dockerfile
FROM mongo
COPY test.csv /test.csv
CMD mongoimport --host mongodb -d test -c places --type csv --file /test.csv --headerline
docker-compose.yml
version: '3'
services:
mongodb:
container_name: mongodb
image: mongo:latest
volumes:
- mongodata:/data/db
ports:
- 27017:27017
web:
build: .
volumes:
- .:/myapp
ports:
- "3000:3000"
links:
- mongodb
depends_on:
- mongodb
tty: true
mongo-seed:
build: ./mongo-seed
links:
- mongodb
volumes:
mongodata:
与其生成一个新的容器,而不是用docker run
连接到已经运行的容器的外壳docker exec -ti <name> bash
。现在,您应该能够使用ping Ping数据库ping mongodb
或执行脚本。
这样做的原因是,您创建的新容器没有与数据库位于同一网络中。
https://docs.docker.com/compose/networking/ https://docs.docker.com/engine/reference/commandline/network_connect/
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句