我是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
答案 0 :(得分:0)
您可以使用此命令通过docker命令运行MongoDB,而无需在ubuntu映像上使用MongoDB:
docker run -d --net=mynet --name mymongo -d mongo:latest
答案 1 :(得分:0)
我建议使用docker-compose进行此类任务。这是连接这两个容器的最简单方法。
取决于
服务之间的快速依赖关系,服务依赖关系导致
以下行为:
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中,您需要执行以下操作才能使其正常工作。
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