我创建了一个新的带有 Docker 的 Digital Ocean 服务器(使用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 似乎也很流行。