我有一个运行芹菜的Docker实例,它是这样构建的:
docker build -t <me>/celery-imagemagick -f docker/celeryDockerFile .
然后我像这样运行它:
docker run --env-file ./docker/env --rm spaceofmotion/celery-imagemagick。
环境文件中有一些配置,包括以本地redis-server为目标的代理urls。
CELERY_BROKER_URL=redis://192.168.86.23:6379/0 CELERY_RESULT_BACKEND=redis://192.168.86.23:6379/0
上面的设置是为了现在的本地测试。它会进入一种状态,启动celery并四处寻找redis,结果却无法连接到以下错误:
consumer: Cannot connect to redis://192.168.86.23:6379/0: Error 111 connecting to 192.168.86.23:6379. Connection refused..
如果我将ip地址更改为localhost,则可以预见它无法找到服务器。然而,如果我只是在没有Docker的情况下通过执行celery worker -A path.to.celery --loglevel=info在本地运行所有这些,那么一切都可以很好地工作。
我做错了什么?
发布于 2019-07-27 07:20:26
默认情况下,Docker容器不会在主机网络(192.168.x.x)上运行。如果你在Linux机器上,你可以使用Docker host networking。
在这种情况下,您还可以添加端口映射。试试这个:
docker run -p 192.168.86.23:6379:6379 ...
这会将本地Redis端口映射到Celery容器中的localhost:6379。https://docs.docker.com/config/containers/container-networking/#published-ports有更多报道。
https://stackoverflow.com/questions/57227593
复制相似问题