Docker Compose部署Airflow容器卡在启动状态且资源占用过高求助
Docker Compose部署Airflow容器启动循环及资源占用过高问题
环境与问题现象
- 部署环境:AWS EC2 t3a.xlarge实例(16GiB内存,AMD EPYC 7571处理器),系统为Ubuntu 24.04 LTS
- 问题:包含Apache Airflow在内的多个容器持续卡在「启动」状态,同时CPU和内存占用过高,容器出现循环重启情况
已尝试操作
- 查看容器日志,未获取到明确的启动失败错误信息
- 在docker-compose.yml中配置容器CPU和内存资源限制,问题未解决
- 重启容器及EC2实例,无效
疑问
- 是否存在遗漏的Docker Compose配置项导致该问题?
- 针对卡在启动循环的Docker容器,有哪些特定诊断方法及资源优化手段?
- 是否需要调整EC2实例规格,或有其他可优先尝试的优化方案?
附docker-compose.yml配置
version: "3" x-airflow-common: &airflow-common image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.8.1} environment: &airflow-common-env AIRFLOW__CORE__EXECUTOR: CeleryExecutor AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:airflow@postgres/airflow AIRFLOW__CELERY__BROKER_URL: redis://:@redis:6379/0 AIRFLOW__CORE__FERNET_KEY: "" AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION: "true" AIRFLOW__CORE__LOAD_EXAMPLES: "false" AIRFLOW__API__AUTH_BACKEND: "airflow.api.auth.backend.basic_auth" AIRFLOW__SMTP__SMTP_HOST: "smtp.gmail.com" AIRFLOW__SMTP__SMTP_PORT: 587 AIRFLOW__SMTP__SMTP_USER: "javiertest592@gmail.com" AIRFLOW__SMTP__SMTP_PASSWORD: "${SMTP_PASSWORD}" AIRFLOW__SMTP__SMTP_MAIL_FROM: "javiertest592@gmail.com" _PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:- pymongo} volumes: - ../ETL:/opt/airflow/ETL - ./dags:/opt/airflow/dags - ./logs:/opt/airflow/logs - ./plugins:/opt/airflow/plugins user: "${AIRFLOW_UID:-50000}:0" depends_on: redis: condition: service_healthy postgres: condition: service_healthy networks: - airflow-net # Référence au réseau airflow-net services: postgres: image: postgres:13 environment: POSTGRES_USER: airflow POSTGRES_PASSWORD: airflow POSTGRES_DB: airflow volumes: - postgres-db-volume:/var/lib/postgresql/data healthcheck: test: ["CMD", "pg_isready", "-U", "airflow"] interval: 5s retries: 5 restart: always networks: - airflow-net # Référence au réseau airflow-net redis: image: redis:latest ports: - 6379:6379 healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 30s retries: 50 restart: always networks: - airflow-net # Référence au réseau airflow-net airflow-webserver: <<: *airflow-common command: webserver ports: - 8080:8080 healthcheck: test: ["CMD", "curl", "--fail", "http://localhost:8080/health"] interval: 10s timeout: 10s retries: 5 restart: always networks: - airflow-net # Référence au réseau airflow-net airflow-scheduler: <<: *airflow-common command: scheduler healthcheck: test: [ "CMD-SHELL", 'airflow jobs check --job-type SchedulerJob --hostname "$${HOSTNAME}"', ] interval: 10s timeout: 10s retries: 5 restart: always networks: - airflow-net # Référence au réseau airflow-net airflow-worker: <<: *airflow-common command: celery worker healthcheck: test: - "CMD-SHELL" - 'celery --app airflow.executors.celery_executor.app inspect ping -d "celery@$${HOSTNAME}"' interval: 10s timeout: 10s retries: 5 restart: always networks: - airflow-net # Référence au réseau airflow-net airflow-init: <<: *airflow-common command: version environment: <<: *airflow-common-env _AIRFLOW_DB_UPGRADE: "true" _AIRFLOW_WWW_USER_CREATE: "true" _AIRFLOW_WWW_USER_USERNAME: ${_AIRFLOW_WWW_USER_USERNAME:-airflow} _AIRFLOW_WWW_USER_PASSWORD: ${_AIRFLOW_WWW_USER_PASSWORD:-airflow} networks: - airflow-net # Référence au réseau airflow-net flower: <<: *airflow-common command: celery flower ports: - 5555:5555 healthcheck: test: ["CMD", "curl", "--fail", "http://localhost:5555/"] interval: 10s timeout: 10s retries: 5 restart: always networks: - airflow-net # Référence au réseau airflow-net networks: airflow-net: external: true # Définir le réseau comme externe volumes: postgres-db-volume:
内容的提问来源于stack exchange,提问作者Cryptropico973
相关产品推荐
相关产品推荐

