Как запустить bash, когда мы запускаем команду docker run без -it? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть Dockerfile следующим образом:

FROM centos
RUN mkdir work
RUN yum install -y python3 java-1.8.0-openjdk java-1.8.0-openjdk-devel tar git wget zip
RUN pip install pandas
RUN pip install boto3
RUN pip install pynt
WORKDIR ./work
CMD ["bash"]

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

docker run imagename

, он ничего не делает, но когда я запускаю

docker run -it imageName

, я попадаю в оболочку bash. Но я хочу попасть в оболочку bash, как только я запускаю команду запуска без каких-либо дополнительных параметров.

Я использую этот контейнер docker в AWS codebuild, и там я не могу указать любые параметры, такие как -it, но я хочу выполнить свой код в самом контейнере docker. Можно ли изменить CMD / ENTRYPOINT таким образом, чтобы при запуске изображения docker я попадал прямо в контейнер?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Я проверил ваш контейнер, он даже не будет построен из-за отсутствия pip. Поэтому я немного изменил его, чтобы он по крайней мере собирал:

FROM centos
RUN mkdir glue
RUN yum install -y python3 java-1.8.0-openjdk java-1.8.0-openjdk-devel tar git wget zip python3-pip
RUN pip3 install pandas
RUN pip3 install boto3
RUN pip3 install pynt
WORKDIR ./glue

Создайте его, используя, например:

docker build . -t glue

Затем вы можете запустить в нем команду, используя, например, следующий синтаксис :

docker run --rm  glue bash -c "mkdir a; ls -a; pwd"

Я использую --rm, поскольку не хочу хранить контейнер.

Надеюсь, это поможет.

0 голосов
/ 23 апреля 2020

Мы не можем войти в контейнер docker напрямую. Если вы хотите запускать какие-либо указанные команды c при запуске контейнера в режиме отсоединения, вы можете указать их в командах CMD и ENTRYPOINT Dockerfile.

Если вы хотите напрямую войти в оболочку, вы может запустить

docker -it run imageName

или

docker run imageName bash -c "ls -ltr;pwd"

, и он вернет выход. Если вы запустили команду run без -it param, вы можете войти в контейнер с помощью:

docker exec -it imageName

и попадете в оболочку.

Теперь, если вы используете AWS пользовательские образы кода для сборки и обеспокоены тем, как команды могут быть отправлены в контейнер, вам нужно поместить свои команды в файл build_spe c .yaml и поместить их в pre_build, build или Параметр post_build и эти команды будут отправлены в контейнер docker.

-build_spe c .yml

version: 0.2
phases:
  pre_build:
    commands:
      - pip install boto3 #or any prebuild configuration

  build:
    commands:
      - spark-submit job.py
  post_build:
    commands:
      - rm -rf /tmp/*

Подробнее о build_spe c здесь

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