让其他容器访问mongo官方docker映像

时间:2018-08-01 12:28:53

标签: mongodb docker

我有几个Docker容器,其中一个是Mongodb官方映像

这是我的docker-compose.yml文件的一部分

version: '3'
services:
  mongo:
    image: mongo
    container_name: mongo01
#    command: ["mongod", "-f", "/etc/mongo/mongod.conf"]
    volumes:
      - ./data/mongodata:/data/db
#      - ./config/mongo:/etc/mongo
    restart: always
    ports:
      - "27017:27017"

我可以从主机(我的系统)访问mongo服务,但是根据mongo新的安全策略,仅通过127.0.0.1就可以配置对mongo的限制访问,我知道,它是

# network interfaces

net:
  port: 27017
  bindIp: 127.0.0.1

如果我可以推送mongo图像以读取我的自定义配置,则可以解决该问题,但是我尝试了

安装一个自定义配置文件- ./config/mongo:/etc/mongo,然后用command: ["mongod", "-f", "/etc/mongo/mongod.conf"]运行mongod,但是没有用。

似乎mongod在进程1中从容器中启动并尝试使用自定义命令运行它不起作用,即使当我尝试使用mongod --shutdown关闭容器中的mongod时,它也会关闭整个容器。(我想停止mongod,然后使用mongod --bind_ip_all

问题是我们如何更改mongo映像配置文件?

2 个答案:

答案 0 :(得分:1)

mongo docker image已经设置了ENTRYPOINT,并且基本上是mongod,因此您可以在命令(CMD)中向mongod添加额外的参数

简单的docker run

docker run -d mongo --bind_ip_all

或带有撰写

version: '3'
services:
  mongo:
    image: mongo
    command: ["--bind_ip_all"]
    ports:
      - "27017:27017"

答案 1 :(得分:0)

只要您未明确绑定特定IP,官方mongo映像的入口点就已经contains a step to add --bind_ip_all

# MongoDB 3.6+ defaults to localhost-only binding
haveBindIp=
if _mongod_hack_have_arg --bind_ip "$@" || _mongod_hack_have_arg --bind_ip_all "$@"; then
    haveBindIp=1
elif _parse_config "$@" && jq --exit-status '.net.bindIp // .net.bindIpAll' "$jsonConfigFile" > /dev/null; then
    haveBindIp=1
fi
if [ -z "$haveBindIp" ]; then
    # so if no "--bind_ip" is specified, let's add "--bind_ip_all"
    set -- "$@" --bind_ip_all
fi