我创建了一个mongodb Dockerfile,如下所示。
FROM mongo
COPY ./start.sh .
RUN chmod +x ./start.sh
EXPOSE 27017-27019
CMD ["./start.sh"]
start.sh包含以下内容
mongod
我用来运行docker的命令
sudo docker run -p 27017:27017 custom_mongo
我可以从容器内部连接此docker(即通过exec -it命令,然后使用mongo客户端),但是,当尝试从Mongo Compass连接时,它超时了,这意味着该端口未转发/暴露。
等效docker在没有任何Dockerfile的情况下直接运行时,已成功连接到Compass。下面是我使用过的命令。
docker run -d -p 27017-27019:27017-27019 --name mongodb mongo
答案 0 :(得分:0)
因此,问题在于start.sh中的 mongod 命令正在侦听127.0.0.1(即本地主机),只能从容器内部而不是外部进行访问。
要使容器侦听外部主机,应将其连接到 0.0.0.0 ,这表示任何IP。因此,要启用该功能,请将启动命令编辑为 mongod --bind_ip_all 。
参考: https://forums.docker.com/t/docker-running-host-but-not-accessible/44082/48