Я использую контейнер докеров в моем 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, иначе ваш следующий вопрос будет о том, куда уходит все ваше дисковое пространство.