Docker-compose:如何连接到mongo容器

时间:2018-05-14 20:43:34

标签: mongodb docker docker-compose

我正在尝试在Docker容器中运行我的简单Ruby应用程序(我是Windows 10用户)。这只是一组在Mongo数据库上运行的Ruby和bash脚本。我正在使用docker-compose组成3个容器 - 一个用于mongo数据库(使用官方mongo图像),一个用于我的应用程序,一个用于填充数据库。

然后我运行docker-compose builddocker-compose up命令。 Mongo醒来很好,它接受数据导入。然后我打开另一个Powershell窗口并运行docker run -it <name> /bin/bash以获取交互式shell并运行我的脚本。不幸的是,由于某种原因,他们无法连接到mongo。

我的连接字符串如下所示:

@client = Mongo::Client.new([ 'mongodb:27017' ], :database => 'test')

我尝试了不同版本,例如mongodbmongodb://mongodb:27017mongodb://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:

1 个答案:

答案 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/