社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Redis

获取python docker容器以与redis docker容器交互

user3062260 • 5 年前 • 1842 次点击  

我对Docker、Redis和任何类型的网络都不熟悉(至少我了解Python!)。首先,我了解了如何获取Redis Docker映像并在Docker容器中运行它:

docker run --name some-redis -d redis

据我所知,这个redis实例有6379端口可用于连接到其他容器。

docker network inspect bridge

   "Containers": {
        "2ecceba2756abf20d5396078fd9b2ecf0d60ab04ca6b8df5e1b631b6fb5e9a85": {
            "Name": "some-redis",
            "EndpointID": "09f0069dae3632a2456cb4d82ad5e7c9782a2b58cb7a4ee655f57b5c410c3e87",
            "MacAddress": "02:42:ac:11:00:02",
            "IPv4Address": "172.17.0.2/16",
            "IPv6Address": ""
        }

如果我运行以下命令,我可以与redis实例交互并生成key:value对:

docker run -it --link some-redis:redis --rm redis redis-cli -h redis -p 6379
set 'a' 'abc'
>OK
get 'a'
>"abc"
quit

我已经了解了如何在安装了Redis库的情况下创建和运行Docker容器,该库将运行python脚本,如下所示:

这是我的文件:

FROM python:3
ADD redis_test_script.py /
RUN pip install redis 
CMD [ "python", "./redis_test_script.py" ]

这里是redis_test_script.py:

import redis
print("hello redis-py")

构建Docker图像:

docker build -t python-redis-py .

如果运行以下命令,脚本将在其容器中运行:

docker run -it --rm --name pyRed python-redis-py

并返回预期值:

>hello redis-py

似乎两个容器都工作正常,问题是将它们连接在一起,我希望最终使用python在redis容器上执行操作。如果我按如下方式修改脚本并重新生成python容器的图像,则会失败:

import redis
print("hello redis-py")
r = redis.Redis(host="localhost", port=6379, db=0)
r.set('z', 'xyz')
r.get('z')

我有几个错误:

...
OSError: [Errno 99] Cannot assign requested address
...
redis.exceptions.ConnectionError: Error 99 connecting to localhost:6379. Cannot assign requested address.
.....

看起来他们没有连接,我在python脚本中再次尝试使用bridge ip:

r = redis.Redis(host="172.17.0.0/16", port=6379, db=0)

然后得到这个错误:

redis.exceptions.ConnectionError: Error -2 connecting to 172.17.0.0/16:6379. Name or service not known.

我尝试了Redis子IP:

r = redis.Redis(host="172.17.0.2/16", port=6379, db=0)

我得到这个错误:

redis.exceptions.ConnectionError: Error -2 connecting to 172.17.0.2/16:6379. Name or service not known.

我觉得我从根本上误解了如何让容器彼此交谈。我已经阅读了很多文档和教程,但是正如我所说,我没有网络经验,以前也没有使用过Docker,所以任何有用的解释和/或解决方案都会非常棒。

多谢

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30844
 
1842 次点击  
文章 [ 2 ]  |  最新文章 5 年前