让其他容器访问Mongo官方Docker镜像

3

我有几个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的新安全策略,有一个限制Mongo访问的配置仅允许通过127.0.0.1进行访问。我知道这个限制。

# network interfaces

net:
  port: 27017
  bindIp: 127.0.0.1

如果我可以推送mongo镜像并读取我的自定义配置,我就可以解决问题,但我尝试挂载自定义配置文件- ./config/mongo:/etc/mongo,然后使用命令["mongod", "-f", "/etc/mongo/mongod.conf"]运行mongod,但没有成功。
似乎mongod在容器中作为进程1启动,并尝试以自定义命令运行它不起作用,即使我试图使用mongod --shutdown关闭容器中的mongod,它也会关闭整个容器。(我想停止mongod,然后使用mongod --bind_ip_all重新运行它)
因此,问题是我们如何更改mongo镜像配置文件?
2个回答

9
该mongo docker镜像已经设置了ENTRYPOINT,基本上就是mongod,所以在您的命令(CMD)中,可以添加额外的参数到mongod。
简单的docker运行命令:
docker run -d mongo --bind_ip_all

或者使用Compose。
version: '3'
services:
  mongo:
    image: mongo
    command: ["--bind_ip_all"]
    ports:
      - "27017:27017"

0

如果您没有显式绑定特定的IP地址,官方mongo镜像的入口点已经包含添加--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

是的,我看到了,我怎么能通过命令将它传递给入口点? - Yuseferi
@zhilevan,你可以将这些参数作为命令传递,并且它们将成为入口点的参数。但是你正在使用默认设置覆盖默认设置,所以我不确定你的目标是什么。 - BMitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接