InsecurePlatformWarning при сборке образа Docker

Я получаю это предупреждение при создании образа Docker:

/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:79: 
      InsecurePlatformWarning: A true SSLContext object is not available. 
      This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. 
      For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.

Несколько источников (например, InsecurePlatformWarning: настоящий объект SSLContext не Это не позволяет urllib3 правильно настроить SSL), говорят, что pip install pyopenssl ndg-httpsclient pyasn1 решит эту проблему. Но я получаю предупреждение, как только pip пытается установить pyopenssl.

Вот мой Dockerfile:

FROM ubuntu:14.04

# Install packages
RUN apt-get update && apt-get install -y \
    git \
    libmysqlclient-dev \
    mysql-server \
    nginx \
    python-dev \
    python-mysqldb \
    python-setuptools \
    supervisor \
    vim
RUN easy_install pip

# Handle urllib3 InsecurePlatformWarning
RUN apt-get install -y libffi-dev libssl-dev
RUN pip install pyopenssl ndg-httpsclient pyasn1

# ...more

person Joe Mornin    schedule 26.09.2015    source источник
comment
попробуйте использовать флаг --upgrade, например: RUN pip install --upgrade pyopenssl ndg-httpsclient pyasn1   -  person dopstar    schedule 26.09.2015
comment
Не повезло (что имеет смысл, поскольку нет существующих пакетов для обновления pip при сборке образа Docker, если только я не понимаю pip install --upgrade).   -  person Joe Mornin    schedule 26.09.2015
comment
попробуйте добавить libpython2.7-dev в RUN apt-get install -y libffi-dev libssl-dev. также лучше pip install requests[security] вместо pip install pyopenssl   -  person ahmed    schedule 26.09.2015
comment
Спасибо, но все равно не повезло.   -  person Joe Mornin    schedule 27.09.2015
comment
Вы можете попробовать установить urllib3 и связанные с ним пакеты прямо из дистрибутива Ubuntu, я думаю, что это python-urllib3.   -  person shazow    schedule 27.09.2015
comment
Похоже, эти предупреждения ожидаются при запуске pip: github.com/pypa/pip/issues/2681 но поскольку вы устанавливаете pyopenssl ndg-httpsclient pyasn1, вы не должны получать предупреждения при использовании запросов Python.   -  person Céline Aussourd    schedule 08.10.2015


Ответы (1)


Похоже, что это предупреждение ожидается при запуске pip: http://github.com/pypa/pip/issues/2681, но поскольку вы устанавливаете pyopenssl ndg-httpsclient pyasn1, вы не будете получать предупреждения при использовании запросов Python.

Например, если я соберу этот Dockerfile:

FROM ubuntu:14.04

# Install packages
RUN apt-get update && apt-get install -y \
    git \
    libmysqlclient-dev \
    mysql-server \
    nginx \
    python-dev \
    python-mysqldb \
    python-setuptools \
    supervisor \
    vim
RUN easy_install pip
RUN pip install requests

а затем запустите это внутри контейнера:

root@b2759f79f947:/# python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> import requests

>>> url = "https://www.digicert.com/"

>>> r = requests.get(url)

/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:100: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.

  InsecurePlatformWarning

Как видите, я получил предупреждение. Но если я добавлю эти строки в Dockerfile:

RUN apt-get install -y libffi-dev libssl-dev
RUN pip install pyopenssl ndg-httpsclient pyasn1

и запускаю те же команды Python, я больше не получаю предупреждение.

Если вам действительно не нужно предупреждение при установке pyopenssl, вы можете установить переменную среды: PYTHONWARNINGS="ignore:a true SSLContext object", как предлагается здесь: https://github.com/pypa/pip/pull/3109

Тогда ваш Dockerfile будет выглядеть так:

FROM ubuntu:14.04

# Install packages
RUN apt-get update && apt-get install -y \
    git \
    libmysqlclient-dev \
    mysql-server \
    nginx \
    python-dev \
    python-mysqldb \
    python-setuptools \
    supervisor \
    vim
RUN easy_install pip

# Handle urllib3 InsecurePlatformWarning
RUN apt-get install -y libffi-dev libssl-dev
ENV PYTHONWARNINGS="ignore:a true SSLContext object"
RUN pip install pyopenssl ndg-httpsclient pyasn1

Другим решением было бы обновить python до 2.7.9.

person Céline Aussourd    schedule 09.10.2015