首页 > 解决方案 > 如何为 Docker 使用制作跨操作系统的 sh 脚本?

问题描述

我在我的项目中使用 docker,主要是 Laravel 项目,它具有构建 MySQL 容器和应用程序容器的配置。

容器分别命名为“ db ”和“ app ”。

在此处输入图像描述

因此,.env文件在主机名“ db ”之后配置,以便正确初始化所服务的网络服务器

在此处输入图像描述

这会强制开发人员在容器内运行与数据库连接有关的适当命令,否则会出错,因为环境认为我们正在谈论计算机上的 mysql 实例。(正确的?)

因此,为了缓解这种情况,在项目根目录中制作了一个脚本。

在此处输入图像描述

./cmd.sh 工匠迁移(作品)

php artisan migrate (不) - 未知数据库

我的问题到此结束,我来这里是为了解决这个问题。

正如您可能看到的,这奇怪地特定于 MacOS 环境,而且确实如此。需要这个脚本来跨操作系统工作,这对 Linux 和 Windows 开发人员来说也意味着无痛,这对我来说有点困难。

那么,TLDR 中的问题:我怎样才能安排这种轻松的方法适用于所有操作系统?

使用当前方式存在以下问题:

Linux:

视窗:

我有点想尝试远离使用乘法文件,每个操作系统一个,作为解决方案。

那么,我在这里缺少什么,这甚至是可行的吗?我在哪里可以读到有关使这可行的信息?

非常感谢您,对文字墙感到非常抱歉。


TLDR:对于 docker 项目,我如何制作一个可以为所有操作系统运行容器命令的脚本?

标签: linuxwindowsmacosdockerdevops

解决方案


使用如何从 Bash 脚本中检测操作系统的 inspo?,(感谢 Richard Barber 的链接),我设法解决了我的问题,使用 OSTYPE 变量来区分正在使用的操作系统。

对于 Windows,只需使用 bash 终端,Linux 或 MacOS 的设置都可以使用。

#!/bin/bash

if [[ "$OSTYPE" == "linux-gnu"* ]]; then
  USER="1000"
else
  USER="33"
fi

artisan() {
    docker-compose exec --user $USER app php artisan "$@"
}

"$@"

推荐阅读