Как мне настроить только python 2.7 в контейнере docker?

#python #node.js #docker #dockerfile

#python #node.js #docker #dockerfile

Вопрос:

У меня есть приложение node, и в одном случае я вызываю скрипт python из узла, используя python-shell . Я пытаюсь настроить это приложение в docker, и мой Dockerfile выглядит примерно так:

 FROM debian:latest
# replace shell with bash so we can source files
RUN rm /bin/sh amp;amp; ln -s /bin/bash /bin/sh
# update the repository sources list
# and install dependencies
RUN apt-get update 
amp;amp; apt-get install -y curl 
amp;amp; apt-get -y autoclean
# nvm environment variables
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 10.15.3
# install nvm
# https://github.com/creationix/nvm#install-script
RUN curl --silent -o-https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh | bash

# install node and npm
RUN source $NVM_DIR/nvm.sh 
amp;amp; nvm install $NODE_VERSION 
amp;amp; nvm alias default $NODE_VERSION 
amp;amp; nvm use default
# add node and npm to path so the commands are available
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
# confirm installation
RUN node -v
RUN npm -v
RUN apt-get -y install python2.7
COPY package.json .
RUN npm install
COPY . .
CMD ["npm","run","start"]
  

после сборки и запуска этого контейнера, когда я пытаюсь вызвать вариант использования, при котором скрипт python вызывается из узла, я получаю эту ошибку.

 null
events.js:174
      throw er; // Unhandled 'error' event
      ^

Error: spawn /usr/lib/python2.7 EACCES
    at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
    at onErrorNT (internal/child_process.js:415:16)
    at process._tickCallback (internal/process/next_tick.js:63:19)
Emitted 'error' event at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:246:12)
    at onErrorNT (internal/child_process.js:415:16)
    at process._tickCallback (internal/process/next_tick.js:63:19)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
  

Помогите настроить только python2.7 в контейнере docker?

Комментарии:

1. Обратите внимание, что точно так же, как в ответах предлагается python изображение, существует и стандартное node изображение . Использование диспетчера версий, например nvm , в Dockerfile, добавляет ненужных сложностей. Рассмотрите возможность использования . встроенного POSIX для «исходных» файлов, а не source расширения, специфичного для bash.

Ответ №1:

Вы можете использовать базовый образ python

 FROM python:2.7
  

Этот базовый образ с предварительно настроенным python, и вам не нужно устанавливать python отдельно. Надеюсь, это поможет.

Вот список доступных изображений

Для быстрого ознакомления, пожалуйста, проверьте https://blog.realkinetic.com/building-minimal-docker-containers-for-python-applications-37d0272c52f3

Комментарии:

1. вы уверены, что имя образа — PYTHON2.7: последняя версия? потому что я получаю сообщение об ошибке, что оно должно быть в нижнем регистре, и даже нижний регистр не работает. pull access denied for python2.7, the repository does not exist or may require 'docker login'

2. Обновлен ответ hub.docker.com/_/python/?tab=tagsamp;page=2 и вы можете найти список изображений.

Ответ №2:

Вы можете использовать «ИЗ python: 2.7», базовый образ.

 FROM python:2.7

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./your-daemon-or-script.py" ]  

(ссылка на документацию) пожалуйста, найдите несколько примеров здесь