get a python docker container to interact with a redis docker container(获取 python docker 容器与 redis docker 容器交互)
问题描述
我是 docker、redis 和任何类型的网络的新手,(我至少知道 python!).首先,我想出了如何获取 redis docker 映像并在 docker 容器中运行它:
I'm new to docker, redis and any kind of networking, (I know python at least!). Firstly I have figured out how to get a redis docker image and run it in a docker container:
据我了解,此 redis 实例具有可用于连接其他容器的端口 6379.
As I understand this redis instance has port 6379 available to connect to other containers.
如果我运行以下命令,我可以与 redis 实例交互并生成键:值对:
If I run the following command I can interact with the redis instance and generate key:value pairs:
我已经知道如何制作和运行安装了 redis 库的 docker 容器,该容器将运行以下 python 脚本:
I have figured out how to make and run a docker container with the redis library installed that will run a python script as follows:
这是我的 Dockerfile:
Here is my Dockerfile:
这里是redis_test_script.py:
Here is redis_test_script.py:
构建 docker 镜像:
Build the docker image:
如果我运行以下命令,脚本将在其容器中运行:
If I run the following command the script runs in its container:
并返回预期的:
看起来两个容器都工作正常,问题是将它们连接在一起,我想最终使用python对redis容器执行操作.如果我按如下方式修改脚本并为 python 容器重建图像,它将失败:
It seems like both containers are working ok, the problem is connecting them both together, I would like to ultimately use python to perform operation on the redis container. If I modify the script as follows and rebuild the image for the python container it fails:
我收到几个错误:
看起来他们没有连接,我再次尝试在 python 脚本中使用网桥 IP:
It looks like they're not connecting, I tried again using the bridge IP in the python script:
并得到这个错误:
我尝试了redis子IP:
and I tried the redis sub IP:
我得到这个错误:
感觉好像我从根本上误解了如何让容器相互通信的一些东西.我已经阅读了很多文档和教程,但正如我所说,没有网络经验并且以前没有使用过 docker,所以任何有用的解释和/或解决方案都会非常棒.
It feels like I'm fundamentally misunderstanding something about how to get the containers to talk to each other. I've read quite a lot of documentation and tutorials but as I say have no networking experience and have not previously used docker so any helpful explanations and/or solutions would be really great.
非常感谢
推荐答案
这就是 Docker 网络的全部内容.快速解决方案 - 对两个容器使用 host
网络模式.缺点是隔离度低,但你会得到它的快速工作:
That's all about Docker networking. Fast solution - use host
network mode for both containers. Drawback is low isolation, but you will get it working fast:
然后从 python
连接到 redis
只需使用 localhost
作为主机名.
Then to connect from python
to redis
just use localhost
as a hostname.
更好的解决方案是使用docker用户定义的桥接网络
Better solution is to use docker user-defined bridge network
请注意,在这种情况下,您不能使用 localhost
而是使用 my-db
作为主机名.这就是我在启动第一个容器时使用 --name my-db
参数的原因.在用户定义的桥接网络中,容器通过名称相互连接.
Note that in this case you cannot use localhost
but instead use my-db
as a hostname. That's why I've used --name my-db
parameter when starting first container. In user-defined bridge networks containers reach each other by theirs names.
这篇关于获取 python docker 容器与 redis docker 容器交互的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!