我用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似乎也很流行。
在我的特殊情况下,PHP和Composer有单独的容器。这就是我在部署时无法通过SSH连接到容器的原因。
因此,我将bin/php
和bin/composer
参数配置如下:
set('bin/php', 'docker exec php php');
set('bin/composer', 'docker run --volume={{release_path}}:/app composer');
请注意,在这里,我们使用exec
为一个持久的php
容器(该容器目前已经运行)和run
来启动一个新的作曲家
容器实例,该实例将在安装依赖项后停止。
你应该试试
docker-compose exec -T php-fpm bash;
T选项将
禁用伪tty分配。默认情况下,docker compose exec分配TTY。
要使用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。 工作目