首页 > 解决方案 > 错误:docker 中不可满足的约束

问题描述

我是码头工人的新手。

我有两个问题
问题 #1
我创建了这个安装Apache-AirflowApache-Celery的基本 docker 文件。但现在,只想安装气流。我正面临一个奇怪的问题unsatisfiable constraints

错误

我累了。我已经尝试但无法解决问题。任何帮助将不胜感激。

FROM python:3.6-alpine
WORKDIR /airflow

RUN apk add git gcc python3-dev gpgme-dev libc-dev python-devel python-setuptools mysql-devel gcc-c++

COPY airflow/requirements.txt airflow/requirements.txt
RUN pip install -r airflow/requirements.txt
COPY . /airflow

EXPOSE 8080 5555

CMD ["airflow", "initdb"]

我有我的 requirements.txt 文件,其中包含 Apache-Airflow 的依赖项。

要求.txt

pytz==2015.7
cryptography
requests
pyOpenSSL
ndg-httpsclient
pyasn1
psycopg2
celery>=4.0.0
flower>=0.7.3

Flask==1.1.1
requests==2.22.0
airflow==1.10.8
MySQL-python
flask_bcrypt

问题2

我们使用conda-libraryimagecontinuumio/miniconda3来安装依赖项。是不是很好用???

标签: linuxdockerdependenciesdockerfileminiconda

解决方案


做了一些更改,这是新的 dockerfile:

FROM python:3.6-alpine
WORKDIR /airflow

RUN apk add build-base libffi-dev musl-dev postgresql-dev mariadb-connector-c-dev

COPY requirements.txt ./requirements.txt
RUN pip install -r requirements.txt
COPY . /airflow

EXPOSE 8080 5555

CMD ["airflow", "initdb"]

以及新的 requirements.txt:

pytz==2015.7
cryptography
pyOpenSSL
ndg-httpsclient
pyasn1
psycopg2
celery>=4.0.0
flower>=0.7.3

Flask==1.1.1
requests==2.22.0
apache-airflow==1.10.8
mysqlclient
flask_bcrypt

变更摘要:

  • 您试图下载 Alpine 中不存在的软件包(它们看起来像 debian 软件包),我将其中大部分替换为apk add build-base
  • libffi-devcryptography包添加
  • 添加musl-devpostgresql-dev用于 psycopg2
  • MySQL-python 不支持 python3 所以我用mysqlclient
  • 添加mariadb-connect-c-devmysqlclient
  • 其他小修复、修复复制路径、删除重复依赖项

是的,通常你最好不要使用 alpine 来构建 python 包(https://pythonspeed.com/articles/alpine-docker-python/)。如果你切换到continuumio/miniconda3它,它会更简单一些(并且构建起来更快)。

FROM continuumio/miniconda3
WORKDIR /airflow

RUN apt-get update && apt-get install -y libpq-dev libmariadbclient-dev build-essential

COPY requirements.txt ./requirements.txt
RUN pip install -r requirements.txt
COPY . /airflow

EXPOSE 8080 5555

CMD ["airflow", "initdb"]

推荐阅读