Назад | Перейти на главную страницу

команда не найдена при использовании контейнера докеров

Я использую контейнер докеров в моем gitlab ci для входа на сервер через ssh. Когда я вхожу на сервер через свой компьютер, можно ли запустить php70 или /usr/bin/php71 без ошибок. Также слева есть типичный user @ pc: path.

Когда я использую ssh-клиент в контейнере докеров и вошел в систему на сервере, есть только «$» и нет user @ pc: path и такие команды, как php70 или /usr/bin/php71 не найдены. Моя первая идея заключалась в том, что я использую другую оболочку, но echo $ SHELL находится на обеих /bin/bash. Мой код gitlab-ci.yml таков:

image: ruby:2.1
  stage: on_server
  environment: production
  before_script:
    # install ssh-agent
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'

    # run ssh-agent
    - eval $(ssh-agent -s)

    # add ssh key stored in SSH_PRIVATE_KEY variable to the agent store
    - ssh-add <(echo "$SSH_KEY_PRIVATE")

    # disable host key checking (NOTE: makes you susceptible to man-in-the-middle attacks)
    # WARNING: use only in docker container, if you use it with shell you will overwrite your user's ssh config
    - mkdir -p ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

  script:
    - ssh $SSH_USER_PRODUCTION@$FTP_HOST_PRODUCTION "bash -l"
    - bash
    - echo $SHELL
    - echo $PATH
    - SYMFONY_ENV=prod php71 composer.phar install --no-dev --optimize-autoloader --ignore-platform-reqs
    - SYMFONY_ENV=prod php71 app/console doctrine:migrations:migrate
    - SYMFONY_ENV=prod php71 app/console cache:clear --env=prod

Кто-нибудь знает, откуда взялось это поведение?

Ты sshвходишь как обычный пользователь?

Ты sshвхожу в тем же машина у вас или на или на удаленную?

Какая у вас ОС? Предполагая * Nix ...

Бегать whoami, groups и echo $PATH (индивидуально конечно).

Если двоичных файлов нет в PATH переменной понятно, почему их не находят.

Вам нужно установить инструменты, чтобы они были в контейнере (если вы этого хотите). ADD и COPY может работать, но вам нужно убедиться, что вы установили Все необходимо. Если вам нужны специальные инструменты и вы создаете образ с Dockerfile тогда один из вариантов - установить их в образ. Вы также можете установить USER параметр в Dockerfile, вы также можете монтировать тома.

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

Вы задаете два вопроса, один из них о подсказке (контролируется $PS1 переменная среды в bash), а другая - о пути ($PATH переменная среды).

Эти два вопроса связаны тем, что оба обычно задаются сценарием запуска, используемым bash. Из руководства bash:

   When bash is invoked as an interactive login shell, or as a  non-inter‐
   active  shell with the --login option, it first reads and executes com‐
   mands from the file /etc/profile, if that file exists.   After  reading
   that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
   in that order, and reads and executes commands from the first one  that
   exists  and  is  readable.  The --noprofile option may be used when the
   shell is started to inhibit this behavior.

При запуске докера вы используете -i параметр для получения интерактивного сеанса. Я предполагаю, что это может быть все, что вам нужно сделать, чтобы ваш контейнер работал должным образом, но также может быть, что вам нужно скопировать в соответствующий профиль или файл bashrc.

Большинство интерактивных вызовов докера нужно запускать как docker run -it --rm repo/image:version .... Подумайте немного о каждом из этих флагов, и особенно о значении --rm flag, иначе ваш следующий вопрос будет о том, куда уходит все ваше дисковое пространство.