我有一个PrestaShop数据库在一个docker容器中运行,我打算back up.事情是,我需要在运行它之前将电子商务商店置于维护模式.理想情况下,我打算在远程机器上运行该脚本让它通过ssh登录,然后与容器交互(通过脚本),但似乎我可能(首先)需要通过ssh登录,然后在服务器上运行脚本?(因为它启动了一个新的shell等)。
这些是我目前为止的脚本部分,但我不确定如何在mysql中将它们组合成字符串命令:
#!/bin/bash
# Log in to docker@debVM server via SSH
ssh docker@debVM
# Run the following Docker Container
docker exec -it ps1-7-mariadb-1 /bin/bash
# Login to the database bitnami_prestashop
mysql -u bn_prestashop -pbitnamiUSER bitnami_prestashop
# Run update - store into maintenance mode
UPDATE ps_configuration SET value='0' WHERE name='PS_SHOP_ENABLE';
#Exit the mysql and docker exec
Exit
#run the backup-volumes-container.sh script
echo running the backup-volumes-container.sh script
cd
cd scripts/
./backup-volumes-container.sh ps1-7-mariadb-1
./backup-volumes-container.sh ps1-7-prestashop-1
echo Backup-volumes complete
希望有人能帮忙-谢谢!
2条答案
按热度按时间sg2wtvxw1#
shell脚本是一系列shell命令,它们可能与您在终端中键入的命令不同。然后,当完成时,它(本地)运行
docker exec
;然后,当完成时,它(本地,在容器外部)运行mysql
;原则上,您可以使用管道语法为命令提供输入,但当您逐步深入到几个层时,这会变得复杂。一些命令可以将其内部命令作为命令行参数提供。例如,
mysql -e 'SELECT ...'
将运行单个SQL调用,或docker exec container-name command arg1
将运行单个命令。但是:我认为您可以完全在本地运行它,根本不需要任何嵌套命令或
docker exec
。您需要做的一点设置是使数据库可以从容器外部访问。
如果你使用Compose,它的
ports:
有相同的语法。如果你删除前面的127.0.0.1
,容器将完全可以通过网络访问,我猜你不想这样。12345
可以是任何没有使用的端口号,但最后一个数字必须是3306
以匹配标准数据库端口。完成此操作后,在目标系统上,您现在可以直接从主机访问主机
127.0.0.1
端口12345
上的数据库,而无需使用Docker工具。(请记住,IP地址是非常特定于上下文的,它在本地系统、远程系统和容器中的含义不同。)您可以类似地使用
ssh
来设置端口转发:同样,
23456
是任何其他未使用的本地端口,12345
与上面的12345
匹配。现在,本地系统上的端口23456
转发到远程系统中的端口12345
,远程系统转发到容器中的端口3306
。通过此设置,现在可以直接在本地运行
mysql
类似地,在本地运行备份脚本,指向端口转发的数据库连接。
f4t66c6m2#
如果你的目标是在你的docker容器中的操作系统上运行命令,请查看docker exec。你可以在你的容器的dockerfile中安装一个mysql客户端,然后像在主机上一样通过docker exec使用它。
如果需要从容器中获取数据,可以将日志文件或其他文件Map到容器中作为文件卷,并让容器将输出写入该文件。
这里有一个例子,我正在谈论的here。