Совместимость с Windows: разрешения? - PullRequest
1 голос
/ 19 июня 2019

ОС Windows 10, я использую Docker Engine версии 18.09.2, версия API - 1.39

Веб-сайт, объясняющий шаги для запуска CAT: https://libraries.io/pypi/medcat

Я строюМедкат изображение локально.Вывод выглядит хорошо до конца процесса сборки:

    Step 10/11 : ENTRYPOINT ["python"]
     ---> Using cache
     ---> 66b414e2093d
    Step 11/11 : CMD ["api.py"]
     ---> Using cache
     ---> db2acf6c4649
    Successfully built db2acf6c4649
    Successfully tagged cat:latest
    SECURITY WARNING: You are building a Docker image from Windows against 
    a non-Windows Docker host. All files and directories added to build 
    context will have '-rwxr-xr-x' permissions. It is recommended to 
    double check and reset permissions for sensitive files and 
    directories.

Когда я пытаюсь запустить только что построенный контейнер, я получаю:

    IT IS UMLS
     * Serving Flask app "api" (lazy loading)
     * Environment: production
       WARNING: This is a development server. Do not use it in a 
    production deployment.
       Use a production WSGI server instead.
     * Debug mode: on
    Traceback (most recent call last):
      File "api.py", line 66, in <module>
        app.run(debug=True, host='0.0.0.0', port=5000)
      File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 
    944, in run 
    run_simple(host, port, self, **options)
      File "/usr/local/lib/python3.7/site-packages/werkzeug/serving.py", 
    line 1007, in run_simple
        run_with_reloader(inner, extra_files, reloader_interval, 
    reloader_type)
      File "/usr/local/lib/python3.7/site-packages/werkzeug/_reloader.py", 
    line 332, in run_with_reloader
        sys.exit(reloader.restart_with_reloader())
      File "/usr/local/lib/python3.7/site-packages/werkzeug/_reloader.py", 
    line 176, in restart_with_reloader
        exit_code = subprocess.call(args, env=new_environ, 
    close_fds=False)
      File "/usr/local/lib/python3.7/subprocess.py", line 323, in call
        with Popen(*popenargs, **kwargs) as p:
      File "/usr/local/lib/python3.7/subprocess.py", line 775, in __init__
        restore_signals, start_new_session)
      File "/usr/local/lib/python3.7/subprocess.py", line 1522, in 
    _execute_child
        raise child_exception_type(errno_num, err_msg, err_filename)
    OSError: [Errno 8] Exec format error: '/cat/api/api.py'

Есть ли у кого-нибудь опыт сборкина винде?Имеет ли предупреждение безопасности какое-либо отношение к этому?

Обновление: Я добавил разрешение для исполняемого файла linux, как и в полученном ответе в этом посте.Затем я построил образ локально, используя следующую команду docker build --network=host -t cat -f Dockerfile.MedMen ., и окончание процесса сборки дает мне тот же Security Warning.Затем я проверил docker run --env-file=./envs/env_medann ubuntu:18.04 env, что дало мне:

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=3d5fd66fadbe
    TYPE=UMLS
    DEBUG=False
    CNTX_SPAN=6
    CNTX_SPAN_SHORT=2
    MIN_CUI_COUNT=100
    MIN_CUI_COUNT_STRICT=1
    MIN_ACC=0.01
    MIN_CONCEPT_LENGTH=1
    NEG_PROB=0.2
    LBL_STYLE=def
    SPACY_MODEL=en_core_sci_md
    UMLS_MODEL=/cat/models/med_ann_norm.dat
    VOCAB_MODEL=/cat/models/med_ann_norm_dict.dat
    MKL_NUM_THREAD=1
    NUMEXPR_NUM_THREADS=1
    OMP_NUM_THREADS=1
    HOME=/root

1 Ответ

1 голос
/ 19 июня 2019

Это связано с тем, что Windows & Linux имеет проблему CR-LF & LF, поэтому необходимо добавить разрешение для исполняемого файла Linux.
В вашем случае, поскольку у вас есть исходный код, я думаю, что у вас установлен git на ваших окнах. Затем вы можете открыть Git Bash, изменить путь к каталогу исходного кода и выполнить в нем следующее:

находить . тип F | xargs dos2unix
chmod -R 777 *

Наконец, восстановите его.


Обновление:

Я полностью пробую ваш код, похоже, проблема в cat/api/api.py, он пропускает #!. Итак, в свой исходный код отредактируйте cat/api/api.py, добавьте следующий в начале исходного кода:

#!/usr/bin/env python

Затем пересоберите с помощью Dockerfile и запустите его снова, вы можете увидеть эффект из браузера:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...