无法从 python 个容器连接 mongodb 个容器
Unable to connect mongodb container from python container
我正在玩 python docker sdk,我的用例是将数据从一个容器存储到 mongodb 容器。但是每当我的容器是 运行 时,它就会抛出一个错误。
pymongo.errors.ServerSelectionTimeoutError: 172.17.0.4:27017: [Errno 111] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 615c9a3b22decbdcf97d4c6b, topology_type: Single, servers: [<ServerDescription ('172.17.0.4', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('172.17.0.4:27017: [Errno 111] Connection refused')>]>
我正在尝试构建自己的映像,但也没有注意到容器中的 mongod 服务。我也没有找到任何服务文件。即使在触发“mongod”之后,甚至在将 bingIP 更改为 0.0.0.0 之后,这也没有用。
下面是我的 docker文件 mongo
FROM ubuntu:latest
RUN apt-get update && apt-get upgrade
COPY ./UTC /etc/localtime
RUN DEBIAN_FRONTEND=noninteractive
RUN ["apt-get", "install", "-y", "--no-install-recommends", "tzdata", "openssh-server"]
RUN apt-get install -y vim wget apt-utils sudo gnupg
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN useradd -rm -s /bin/bash -g root -G sudo -u 1001 admin
RUN echo "admin:admin" | chpasswd
COPY id_rsa.pub /home/admin/.ssh/authorized_keys
COPY init_script.sh /home
RUN chown -R admin /home/admin/.ssh
RUN chmod 600 /home/admin/.ssh/authorized_keys
RUN wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | apt-key add -
RUN echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-5.0.list
RUN apt-get update
RUN mkdir -p /data/db
USER root
RUN sudo chown -R root /data/db
RUN apt-get install -y --no-install-recommends mongodb-org
EXPOSE 22
EXPOSE 27017
ENTRYPOINT bash -c /home/init_script.sh
这是我的 init_script.sh
service ssh restart
mongod >> /dev/null
这是试图访问 mongodb 容器的 python 代码
def create_db_connect():
info=open('/home/ip_file.json',)
ip_info=json.load(info)
ip=ip_info["/login_mongo"]
url="mongodb://"+ip+":27017/"
myclient = pymongo.MongoClient(url)
return myclient
ip_file.json 是一个动态生成的文件,如下所示
{
"/login_mongo": "172.17.0.3"
}
我仍在尝试确定 mongo 是否已正确安装。因为我使用 mongodb 已经 2 天了,所以一切都有点混乱。
我已经解决了这个问题。感谢@DavidMaze 的投入。我注意到即使在 mongo.conf 中绑定 0.0.0.0 IP 后,mongod 也只监听本地主机。 mongodb 未显示为服务,因此即使在删除 /tmp/mongo* 和 mongo 锁后我们也无法可靠地应用这些更改。
这就是我所做的。我没有执行 mongod,而是执行了 mongod --bind_ip_all。此语句允许连接所有远程主机。
这么小的逻辑。我觉得自己像个笨蛋。
我正在玩 python docker sdk,我的用例是将数据从一个容器存储到 mongodb 容器。但是每当我的容器是 运行 时,它就会抛出一个错误。
pymongo.errors.ServerSelectionTimeoutError: 172.17.0.4:27017: [Errno 111] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 615c9a3b22decbdcf97d4c6b, topology_type: Single, servers: [<ServerDescription ('172.17.0.4', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('172.17.0.4:27017: [Errno 111] Connection refused')>]>
我正在尝试构建自己的映像,但也没有注意到容器中的 mongod 服务。我也没有找到任何服务文件。即使在触发“mongod”之后,甚至在将 bingIP 更改为 0.0.0.0 之后,这也没有用。
下面是我的 docker文件 mongo
FROM ubuntu:latest
RUN apt-get update && apt-get upgrade
COPY ./UTC /etc/localtime
RUN DEBIAN_FRONTEND=noninteractive
RUN ["apt-get", "install", "-y", "--no-install-recommends", "tzdata", "openssh-server"]
RUN apt-get install -y vim wget apt-utils sudo gnupg
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN useradd -rm -s /bin/bash -g root -G sudo -u 1001 admin
RUN echo "admin:admin" | chpasswd
COPY id_rsa.pub /home/admin/.ssh/authorized_keys
COPY init_script.sh /home
RUN chown -R admin /home/admin/.ssh
RUN chmod 600 /home/admin/.ssh/authorized_keys
RUN wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | apt-key add -
RUN echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-5.0.list
RUN apt-get update
RUN mkdir -p /data/db
USER root
RUN sudo chown -R root /data/db
RUN apt-get install -y --no-install-recommends mongodb-org
EXPOSE 22
EXPOSE 27017
ENTRYPOINT bash -c /home/init_script.sh
这是我的 init_script.sh
service ssh restart
mongod >> /dev/null
这是试图访问 mongodb 容器的 python 代码
def create_db_connect():
info=open('/home/ip_file.json',)
ip_info=json.load(info)
ip=ip_info["/login_mongo"]
url="mongodb://"+ip+":27017/"
myclient = pymongo.MongoClient(url)
return myclient
ip_file.json 是一个动态生成的文件,如下所示
{
"/login_mongo": "172.17.0.3"
}
我仍在尝试确定 mongo 是否已正确安装。因为我使用 mongodb 已经 2 天了,所以一切都有点混乱。
我已经解决了这个问题。感谢@DavidMaze 的投入。我注意到即使在 mongo.conf 中绑定 0.0.0.0 IP 后,mongod 也只监听本地主机。 mongodb 未显示为服务,因此即使在删除 /tmp/mongo* 和 mongo 锁后我们也无法可靠地应用这些更改。
这就是我所做的。我没有执行 mongod,而是执行了 mongod --bind_ip_all。此语句允许连接所有远程主机。
这么小的逻辑。我觉得自己像个笨蛋。