当前位置: 首页 > 知识库问答 >
问题:

如何使用部署与Docker(Laradock)

茹航
2023-03-14

我用Docker(使用Laradock)创建了一个全新的数字海洋服务器,使我的Laravel网站运行良好。

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

我想我唯一的问题是我不能让Deployer运行DockerExec-it$(DockerCompose ps-QPHPFPM)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似乎也很流行。


共有3个答案

秦雅逸
2023-03-14

在我的特殊情况下,PHP和Composer有单独的容器。这就是我在部署时无法通过SSH连接到容器的原因。

因此,我将bin/phpbin/composer参数配置如下:

set('bin/php', 'docker exec php php');
set('bin/composer', 'docker run --volume={{release_path}}:/app composer');

请注意,在这里,我们使用exec为一个持久的php容器(该容器目前已经运行)和run来启动一个新的作曲家容器实例,该实例将在安装依赖项后停止。

蒋典
2023-03-14

你应该试试

docker-compose exec -T php-fpm bash;

T选项将

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

谢建业
2023-03-14

要使用Laravel Deployer,您应该通过ssh直接连接到工作区容器。

您可以公开容器的ssh端口:https://laradock.io/documentation/#access-workspace-via-ssh

假设您已经将容器ssh端口22转发到vm端口2222。在这种情况下,您需要将部署程序配置为使用端口2222。

还要记住设置适当的安全SSH密钥,而不是默认密钥。

 类似资料:
  • 快速开始 启动seata-server实例 $ docker run --name seata-server -p 8091:8091 seataio/seata-server:latest 指定seata-server IP和端口 启动 $ docker run --name seata-server \ -p 8091:8091 \ -e SEATA_IP=1

  • Docker Compose允许定义和运行单主机,多容器Docker应用程序。 使用Compose,您可以使用Compose文件来配置MinIO服务。 然后,使用单个命令,您可以通过你的配置创建并启动所有分布式MinIO实例。 分布式MinIO实例将部署在同一主机上的多个容器中。 这是建立基于分布式MinIO的开发,测试和分期环境的好方法。 1. 前提条件 熟悉 Docker Compose. D

  • Docker Engine在Swarm模式下提供集群管理和编排功能。 MinIO服务器可以在Swarm的分布式模式下轻松部署,创建一个多租户,高可用性和可扩展的对象存储。 从Docker Engine v1.13.0 (Docker Compose v3.0)开始, Docker Swarm和Compose 二者cross-compatible。这允许将Compose file用作在Swarm上部

  • 有可能在Tomcat中部署一些java war或jar文件吗?我找了很多教程,我找到的唯一解决方案是将项目war文件复制到中。 我实际上使用了这个解决方案,但我想改进我的文档化。我的主要目标是当我用docker-comush运行我的两个映像(tomcat和db映像中的应用程序)时,我想使用tomcat中目标文件夹的本地war文件,当我在代码更改后再次构建war时,该更改将在不停止容器、删除和重建的

  • 运行所使用的demo项目地址 直连方式的Seata配置博客 Seata整合Nacos配置博客 我们接着前几篇篇的基础上去配置nacos做配置中心跟dubbo注册中心. 准备工作 ​ 1.安装docker yum -y install docker ​ 2.创建nacos与seata的数据库 /******************************************/ /* 数据库

  • 本文向大家介绍如何用docker部署redis cluster的方法,包括了如何用docker部署redis cluster的方法的使用技巧和注意事项,需要的朋友参考一下 前言 由于本人是个docker控,不喜欢安装各种环境,而且安装redis-trib也有点繁琐,索性用docker来做redis cluster。 本文用的是伪集群,真正的集群放到不同的机器即可。端口是7001-7006。 工作目