Я создал новый сервер Digital Ocean с Docker на нем (используя Laradock), и мой веб-сайт Laravel заработал нормально.
Теперь я хочу автоматизировать развертывание с помощью Deployer.
Я думаю, что моя единственная проблема заключается в том, что я не могу заставить Deployer запустить docker exec -it $(docker-compose ps -q php-fpm) bash;
, что является командой, которую я успешно использую вручную для входа в соответствующий контейнер Docker (после использования SSH для подключения с моей локальной машины к серверу Digital Ocean).
Когда Deployer пытается запустить его, я получаю следующее сообщение об ошибке:
➤ Executing task execphpfpm
[1.5.6.6] > cd /root/laradock && (pwd;)
[1.5.6.6] < /root/laradock
[1.5.6.6] > cd /root/laradock && (docker exec -it $(docker-compose ps -q php-fpm) bash;)
[1.5.6.6] < the input device is not a TTY
➤ Executing task deploy:failed
• done on [1.5.6.6]
✔ Ok [3ms]
➤ Executing task deploy:unlock
[1.5.6.6] > rm -f ~/daily/.dep/deploy.lock
• done on [1.5.6.6]
✔ Ok [188ms]
In Client.php line 99:
[Deployer\Exception\RuntimeException (1)]
The command "cd /root/laradock && (docker exec -it $(docker-compose ps -q php-fpm) bash;)" failed.
Exit Code: 1 (General error)
Host Name: 1.5.6.6
================
the input device is not a TTY
Вот соответствующие части моего deploy.php
:
host('1.5.6.6')
->user('root')
->identityFile('~/.ssh/id_rsa2018-07-09')
->forwardAgent(true)
->stage('production')
->set('deploy_path', '~/{{application}}');
before('deploy:prepare', 'execphpfpm');
task('execphpfpm', function () {
cd('/root/laradock');
run('pwd;');
run('docker exec -it $(docker-compose ps -q php-fpm) bash;');
run('pwd');
});
Я уже провел полтора дня, читая бесчисленное количество статей и пробуя так много разных вариантов. Например. замена флага -it
на -i
, или установка export COMPOSE_INTERACTIVE_NO_CLI=1
, или замена всей команды docker exec
на docker-compose exec php-fpm bash;
.
Я ожидаю, что мне не хватает чего-то довольно простого. Docker широко используется, и Deployer тоже кажется популярным.
run('cd /root/laradock && (docker exec -it $(docker-compose ps -q php-fpm) bash;)', ['tty' => true]);
приводит к тому, что мой сценарийdeploy.php
успешно переключается в контейнерphp-fpm
, но приостанавливает Deployer до тех пор, пока я не наберу exit, после чего он, к сожалению, переключается обратно из контейнераphp-fpm
(и поэтому терпит неудачу). Если я вместо этого используюrun('cd /root/laradock && (docker exec -i $(docker-compose ps -q php-fpm) bash;)');
, эта команда будет полностью проигнорирована; каталог остается как/root
на верхнем уровне сервера, а не в контейнере. - person Ryan   schedule 11.07.2018docker exec container-name bash -l -c
. Вы можете использовать его для запуска команд внутри контейнера рабочей области. - person rhand   schedule 05.01.2019