Python芹菜试图占据docker compose中的端口号并产生问题
docker-compose.yml:Python芹菜试图占据docker compose中的端口号并产生问题,python,python-3.x,docker,docker-compose,celery,Python,Python 3.x,Docker,Docker Compose,Celery,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: &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"]
在做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
获得相同错误。:/我哪里出错了?
只是怀疑卷:
部分。有谁能告诉我卷是否正确吗?
请帮我纠正这个错误。PS,先试试docker。
谢谢 这是因为您重新使用了pythonapi
的完整配置,包括将公开端口8000的ports
部分(顺便说一下,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:
.
.
.
版本:“3.7”
x-common-python-api:
&默认python api
建造:
上下文:/Users/AjayB/Desktop/pythonapi/
网络:
-应用层
环境:
-PYTHON\u API\u ENV=开发
卷数:
-.:/python\u api/
服务:
python api:
docker compose.yml文件中有很多内容,但大部分内容都是不必要的<代码>公开:
在Dockerfile中几乎什么都不做<代码>链接:
当前网络系统不需要链接;Compose为您提供一个默认网络;您的卷:
尝试将代码注入到映像中应该已经存在的容器中。如果您清理了所有这些,那么您真正想从一个容器重用到另一个容器的唯一部分就是它的构建:
(或图像:
),此时YAML锚语法是不必要的
此docker compose.yml
在功能上应与您在问题中显示的内容等效:
版本:“3”
服务:
python api:
建造:
上下文:/Users/AjayB/Desktop/pythonapi/
端口:
- "8000:8000"
#无网络:,请使用“默认值”`
#不公开:,使用Dockerfile中的内容(或不公开)
取决于:
-python模型
#无卷:,使用Dockerfile中的内容
#无环境:,这似乎是Dockerfile中的必需设置
#无命令:,使用Dockerfile中的内容
python模型:
建造:
上下文:/Users/AjayB/Desktop/Python/Python/
端口:
- "8001:8001"
蟒蛇芹菜:
构建:#从python api复制
上下文:/Users/AjayB/Desktop/pythonapi/
取决于:
-雷迪斯
命令:芹菜-服务器工作者-l信息#一行,无sh-c包装
redis:
图片:redis:5.0.8-alpine
#没有主机名:,它什么都不做
端口:
- "6379:6379"
#无命令:,使用图像中的内容
再次注意,我们实际上从pythonapi
容器复制到pythonseclery
容器的唯一内容是build:
块;将在两个容器(代码、公开端口)之间共享的所有其他设置都包含在描述如何构建映像的Dockerfile
中
另一方面,您需要确保所有这些设置实际上都包含在您的Dockerfile
中:
#将应用程序代码复制到
复制
#设置“开发”环境变量
ENV PYTHON\u API\u ENV=开发
#记录默认情况下将使用的端口
曝光8000
#指定要运行的默认命令
#(考虑使用此内容编写shell脚本)
CMD python_api_setup.sh开发和\
python manage.py迁移&&\
python manage.py运行服务器0.0.0.0:8000
乍一看,您的方法似乎很合理,应该能按预期工作。但是,我不清楚您使用YAML锚的别名。我认为您正在尝试在服务之间创建引用,但是,您可以从其他容器通过DNS名称python-api
引用,例如python-api
。请删除YAML锚和别名,然后尝试不使用。
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:
.
.
.