Python Celery试图在docker-compose中占用端口号并造成问题

阿杰(Ajay Bhagchandani)

docker-compose.yml:

  python-api: &python-api
    build:
      context: /Users/AjayB/Desktop/python-api/
    ports:
      - "8000:8000"
    networks:
      - app-tier
    expose:
      - "8000"
    depends_on:
      - python-model
    volumes:
      - .:/python_api/
    environment:
      - PYTHON_API_ENV=development
    command: >
      sh -c "ls /python-api/ &&
             python_api_setup.sh development
             python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"

  python-model: &python-model
    build:
      context: /Users/AjayB/Desktop/Python/python/
    ports:
      - "8001:8001"
    networks:
      - app-tier
    environment:
      - PYTHON_API_ENV=development
    expose:
      - "8001"
    volumes:
      - .:/python_model/
    command: >
      sh -c "ls /python-model/
             python_setup.sh development
             cd /server/ &&
             python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8001"

  python-celery:
    <<: *python-api
    environment:
      - PYTHON_API_ENV=development
    networks:
      - app-tier
    links:
      - redis:redis
    depends_on:
      - redis
    command: >
      sh -c "celery -A server worker -l info"

  redis:
    image: redis:5.0.8-alpine
    hostname: redis
    networks:
          - app-tier
    expose:
      - "6379"
    ports:
      - "6379:6379"
    command: ["redis-server"]

python-celerypython-api其中应作为单独的容器运行。但是,它试图占用与相同的端口python-api,这绝对不可能。

我得到的错误是:

AjayB$ docker-compose up
Creating integrated_redis_1        ... done
Creating integrated_python-model_1 ... done
Creating integrated_python-api_1   ... 
Creating integrated_python-celery_1 ... error

Creating integrated_python-api_1    ... done
e1d1055165b1f85f179f69c): Bind for 0.0.0.0:8000 failed: port is already allocated

ERROR: for python-celery  Cannot start service python-celery: driver failed programming external connectivity on endpoint integrated_python-celery_1 (ab5e079dbc3a30223e16052f21744c2b5dfc56adbe1d1055165b1f85f179f69c): Bind for 0.0.0.0:8000 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.

在做docker ps -a,我得到这个:

AjayB$ docker ps -a
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                      PORTS                    NAMES
2ff1277fb7a7        integrated_python-celery   "sh -c 'celery -A se…"   10 seconds ago      Created                                              integrated_python-celery_1
5b60221b42a4        integrated_python-api      "sh -c 'ls /crackd-a…"   11 seconds ago      Up 9 seconds                0.0.0.0:8000->8000/tcp   integrated_python-api_1
bacd8aa3268f        integrated_python-model    "sh -c 'ls /crackd-m…"   12 seconds ago      Exited (2) 10 seconds ago                            integrated_python-model_1
9fdab833b436        redis:5.0.8-alpine         "docker-entrypoint.s…"   12 seconds ago      Up 10 seconds               0.0.0.0:6379->6379/tcp   integrated_redis_1

尝试强行卸下容器,并尝试docker-compose up得到相同的错误。:/我在哪里犯错?只是怀疑volumes:部分。谁能告诉我是否volumes正确?并请帮助我解决此错误。PS,首先尝试使用docker。谢谢!

破墙

这是因为您重新使用了python-api包含ports将公开端口8000部分的完整配置(顺便说一句,expose因为您的ports部分已经公开了端口,所以是多余的)。

我将创建一个可由任何服务使用的公共部分。在您的情况下,将是这样的:

version: '3.7'

x-common-python-api:
   &default-python-api
    build:
      context: /Users/AjayB/Desktop/python-api/
    networks:
      - app-tier
    environment:
      - PYTHON_API_ENV=development
    volumes:
      - .:/python_api/

services:

  python-api:
    <<: *default-python-api
    ports:
      - "8000:8000"
    depends_on:
      - python-model
    command: >
      sh -c "ls /python-api/ &&
             python_api_setup.sh development
             python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"

  python-model: &python-model
     .
     .
     .

  python-celery:
    <<: *default-python-api
    links:
      - redis:redis
    depends_on:
      - redis
    command: >
      sh -c "celery -A server worker -l info"

  redis:
     .
     .
     .

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

隐藏NGINX Docker容器公开的URL中的端口号

使用 docker-compose 部署 docker stack 并发布端口号

linphone(Python)更改端口号

Beego-使用来自docker-compose Implementaion的端口号,而不是使用来自app.conf的端口号

使用 2 个不同的版本和端口号运行 elasticsearch docker 的问题

Python正则表达式从IP字符串中删除端口号

更改在 jelastic 中公开公开的 docker 服务的端口号

Python socketserver,如何获取我自己的TCP端口号

获取flask网站的Python进程ID和/或端口号?

如何防止Visual Studio或Docker更改主机端口号?

需要帮助将源和目标端口号输出给用户,使用 Python 和 dpkt 从 pcap 文件中读取

Docker错误-CommandError:“ 0.0.0.0:”不是有效的端口号或地址:端口对

试图找到 docker-compose 远程 API

试图解决 Python 中的递归问题

适用于Windows的Docker:使用相同的端口号在本地启动多个Docker容器

无法使用docker-compose启动Celery

python中的SqlAlchemy和Celery结构问题

Python 3-从动态网页提取IP地址和端口号

将端口号从docker-maven-plugin传递到spring属性

为什么Docker使用32768-65535之间的端口号?

Docker运行-p?/?(这两个端口号是什么,它们代表什么)

如何在运行时给Docker容器提供端口号?

如何解决docker-compose文件中的端口问题

如何替换JavaScript中的端口号?

从Java中的URL删除端口号

删除图像 url 中的端口号?

在directadmin中隐藏端口号(:2222)

反应中的冲突端口号

在Docker容器中运行Celery任务时出现问题