在两个Docker容器之间创建网络

时间:2019-08-03 08:31:42

标签: mongodb docker dockerfile

我是docker的新手,正在尝试探索它。我有两个在主机上运行的容器。在第一个容器中,我安装了安装了ubuntu:18.04基本映像的mongodb服务器,在第二个容器中,我具有了我的API代码的二进制文件。现在,我想连接在第一个容器中运行的mongodb服务器。我尝试通过创建用户定义的网络并使用容器的名称进行连接,但未连接。在API代码中,我正在使用类似的方式连接到mongodb服务器“ mongodb:// mongodbconainerName:27017”。我已经用Go编写了代码。任何帮助,将不胜感激。

//用于api的Dockerfile

FROM scratch
ADD restfulApis restfulApis
EXPOSE 8080 27017
ENTRYPOINT ["/restfulApis"]

//用于mongodbserver的Dockerfile

FROM ubuntu:18.04
RUN apt-get update && apt-get install -y mongodb
RUN mkdir -p /data/db
CMD ["mongod"]
EXPOSE 27017

// docker运行命令

docker run -d --net=mynet --name container1 mongodbserver
docker run -d --net=mynet --name container2 apicode

3 个答案:

答案 0 :(得分:0)

您可以使用此命令通过docker命令运行MongoDB,而无需在ubuntu映像上使用MongoDB:

docker run -d --net=mynet --name mymongo -d mongo:latest

答案 1 :(得分:0)

我建议使用docker-compose进行此类任务。这是连接这两个容器的最简单方法。

取决于

  

服务之间的快速依赖关系,服务依赖关系导致
  以下行为:

  • docker-compose up以依赖关系顺序启动服务。在里面 在以下示例中,mongodb将在apicode之前启动。
  • docker-compose up SERVICE自动包含SERVICE的 依赖性。在以下示例中,docker-compose up网站还将创建并启动MongoDB。
  • docker-compose stop以依赖关系顺序停止服务。在里面 在下面的示例中,apicode在mongodb之前停止。

docker-compose.yml

version: '3.1'
services:
  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example 
    networks:
      - mongonetwork
  web:
    image: "node:alpine"
    command: tail -f /dev/null
    depends_on:
      - mongo
    networks:
      - mongonetwork
networks:
  mongonetwork:
    driver: bridge
  

当docker-compose执行> V2文件时,它将自动构建一个   文件中定义的所有容器与每个容器之间的网络   容器将能够立即引用其他人使用的容器   docker-compose.yml文件中定义的名称。

在上述情况下,您的Mongo主机将仅为mongo。见下面的例子 我没有运行时,因此在nodejs上进行测试是最简单的代码

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://mongo:27017/mydb";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  console.log("Database created!");
  db.close();
});

mongo主机将是`mongo

注意:在Ubuntu中,您需要执行以下操作才能使其正常工作。

  • 设置用户名并传递一些脚本
  • 允许/etc/mongo.conf中127.0.0.1以外的其他连接
  • 您当前正在安装v3.*的ubuntu Dockerfile,该文件在连接期间具有一些bug,此问题在更高版本中已修复。

答案 2 :(得分:0)

您实际上需要自定义的MongoDB映像吗?如果您点击此链接-https://github.com/docker-library/docs/tree/master/mongo#connect-to-mongodb-from-another-docker-container,会更容易。

在此之后,我尝试了以下操作:

# create a docker bridge network of your own
$ docker network create mongodb

# deploy a mongodb server using this network, so that the container name (the hostname) is available to the other containers using the same above network
$ docker run --name mongodb --network mongodb --rm -d mongo:4.0

# Connect to MongoDB from another Docker container
$ docker run -it --network mongodb --rm mongo mongo --host mongodb test
...
> db.getName();
test
>

因此,您也可以使用以下地址使用该地址:mongodb://mongodb:27017/test

因为我可以从第二个容器连接到在第一个容器上运行的MongoDB服务器,所以您也可以使用正确的连接信息连接到服务器。

看,很简单。

如果您想通过身份验证部署MongoDB服务器,那么例如,我尝试了以下方法:

$ docker run -d --network mongodb --name mongodb \
    -e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
    -e MONGO_INITDB_ROOT_PASSWORD=secret \
    mongo:4.0

$ docker run -it --rm --network mongodb mongo \
    mongo --host mongodb \
        -u mongoadmin \
        -p secret \
        --authenticationDatabase admin \
        test
...
> db.getName();
test