我正在尝试在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没有显示任何连接尝试。
我做错了什么?
Dockerfile
FROM ruby:2.5
WORKDIR /usr/src/app
COPY Gemfile Gemfile.lock ./
RUN bundle install
COPY . .
Mongo-seed Dockerfile
FROM mongo
COPY test.csv /test.csv
CMD mongoimport --host mongodb -d test -c places --type csv --file /test.csv --headerline
搬运工-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:
答案 0 :(得分:2)
而不是使用docker run
生成一个新容器,而是使用docker exec -ti <name> bash
连接到已运行的容器的shell。现在,您应该能够使用ping mongodb
ping数据库或执行脚本。
原因是您创建的新容器不会在与数据库相同的网络中生成。
https://docs.docker.com/compose/networking/ https://docs.docker.com/engine/reference/commandline/network_connect/