如何将 Deployer 与 Docker (Laradock) 一起使用

Rya*_*yan 6 docker docker-compose php-deployer laradock docker-exec

我使用 Docker 创建了一个新的 Digital Ocean 服务器(使用Laradock),并使我的 Laravel 网站运行良好。

\n\n

现在我想使用Deployer自动化部署。

\n\n

我认为我唯一的问题是我无法让 Deployer 运行docker exec -it $(docker-compose ps -q php-fpm) bash;,这是我成功手动使用进入适当 Docker 容器的命令(在使用 SSH 从我的本地计算机连接到 Digital Ocean 服务器之后)。

\n\n

当 Deployer 尝试运行它时,我收到以下错误消息:

\n\n
\xe2\x9e\xa4 Executing task execphpfpm\n[1.5.6.6] > cd /root/laradock && (pwd;)\n[1.5.6.6] < /root/laradock\n[1.5.6.6] > cd /root/laradock && (docker exec -it $(docker-compose ps -q php-fpm) bash;)\n[1.5.6.6] < the input device is not a TTY\n\xe2\x9e\xa4 Executing task deploy:failed\n\xe2\x80\xa2 done on [1.5.6.6]\n\xe2\x9c\x94 Ok [3ms]\n\xe2\x9e\xa4 Executing task deploy:unlock\n[1.5.6.6] > rm -f ~/daily/.dep/deploy.lock\n\xe2\x80\xa2 done on [1.5.6.6]\n\xe2\x9c\x94 Ok [188ms]\n\nIn Client.php line 99:\n\n  [Deployer\\Exception\\RuntimeException (1)]\n  The command "cd /root/laradock && (docker exec -it $(docker-compose ps -q php-fpm) bash;)" failed.\n\n  Exit Code: 1 (General error)\n\n  Host Name: 1.5.6.6\n\n  ================\n  the input device is not a TTY\n
Run Code Online (Sandbox Code Playgroud)\n\n

以下是我的相关部分deploy.php

\n\n
host(\'1.5.6.6\')\n        ->user(\'root\')\n        ->identityFile(\'~/.ssh/id_rsa2018-07-09\')\n        ->forwardAgent(true)\n        ->stage(\'production\')\n        ->set(\'deploy_path\', \'~/{{application}}\');\n\nbefore(\'deploy:prepare\', \'execphpfpm\');\n\ntask(\'execphpfpm\', function () {\n    cd(\'/root/laradock\');\n    run(\'pwd;\');\n    run(\'docker exec -it $(docker-compose ps -q php-fpm) bash;\');\n    run(\'pwd\');\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已经花了一天半的时间阅读了无数文章并尝试了许多不同的变体。例如,将-it标志替换为-i,或者将export COMPOSE_INTERACTIVE_NO_CLI=1整个docker exec命令设置或替换为docker-compose exec php-fpm bash;

\n\n

我希望我错过了一些相当简单的东西。Docker 被广泛使用,Deployer 似乎也很受欢迎。

\n

Din*_*ino 0

你应该试试

docker-compose exec -T php-fpm bash;
Run Code Online (Sandbox Code Playgroud)

-T 选项将

禁用伪 tty 分配。默认情况下docker-compose exec分配 TTY。