Команда для доступа к запросу контейнера после точки входа - PullRequest
1 голос
/ 03 мая 2019

Какую команду можно добавить в конец Dockerfile, чтобы получить приглашение к контейнеру после ENNTRYPOINT? Dockerfile работает нормально. Просто он возвращается к приглашению, из которого он был выполнен.

 # Pull base image
From ubuntu:18.04
LABEL maintainer="tester@gmail.com"

# Install dependencies
RUN apt-get update -y
RUN apt-get install -y build-essential python3.6 python3.6-dev python3-pip python3.6-venv
RUN apt-get install -y vim
RUN python3.6 -m pip install pip --upgrade
RUN pip3 install pytest pytest-cache
RUN pip3 install pylint
RUN pip3 install requests

# Create working directory
RUN mkdir /testsuite

# Copy project
COPY comments_categories_api  /testsuite/comments_categories_api
COPY comments_posts_api  /testsuite/comments_posts_api/
RUN chmod -R a+rwX testsuite/
# Set working directory

WORKDIR /testsuite
# Set Python version
RUN echo alias python='/usr/bin/python3' >> ~/.bashrc
# RUN echo cd testsuite/ >> ~/.bashrc

# Define ENTRYPOINT
COPY ./docker-entrypoint.sh /testsuite/docker-entrypoint.sh
RUN ["chmod", "+x", "/testsuite/docker-entrypoint.sh"]
ENTRYPOINT ["sh", "/testsuite/docker-entrypoint.sh"] 

Ответы [ 2 ]

1 голос
/ 03 мая 2019

После окончания ENTRYPOINT контейнер определенно завершается.

Похоже, вы говорите, что вам нужен контейнер, который сначала выполняет какой-то тест, а затем запускает интерактивную оболочку.Вам нужно создать сценарий оболочки, который делает это

#!/bin/sh
pytest -v
sh

, а затем сделать этот сценарий основным процессом изображения.


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

docker run -it vip_app:v0.1 /bin/bash

Если вы объявите команду процесса с CMD, ваша команда /bin/bash заменит CMD, и вы получите интерактивную оболочку.Если вы объявляете это с помощью ENTRYPOINT, /bin/bash передается в качестве аргумента ENTRYPOINT (и, вероятно, полностью игнорируется).Я предпочитаю предпочитать CMD ENTRYPOINT, если мне явно не нужны оба.

Вы также пытаетесь изменить команду python по умолчанию, используя файл .bashrc..bashrc не читается во многих распространенных случаях.Например, если вы

docker run --rm vip_app:v0.1 python myapp.py

, .bashrc не будут прочитаны, и вы запустите /usr/bin/python (что, вероятно, Python 2.7).Я просто не стал бы устанавливать такие «удобные» вещи в образе вообще.

1 голос
/ 03 мая 2019

Завершите ваш docker-entrypoint.sh "$ @". Это пример:

#!/bin/bash

echo Hello

$@

=== ОБНОВЛЕНИЕ

Исходя из вашего комментария, файл должен быть:

#!/bin/bash

pytest -v

$@
...