我正在为 Windows 运行 make。( choco install make)
在我尝试构建 docker 容器(特别是部署在 Amazon ECS 上)之前,几乎一切都运行良好......
ECS 部署过程的一部分是您从 AWS 获得登录名,
aws ecr get-login
这将返回一个包含命令的字符串,看起来像
docker login -u AWS -p AQEC...HGZSSUMX4ftIpo8gY2 -e none https://123456789.dkr.ecr.us-east-1.amazonaws.com
如果我只是从 shell 运行它,我会复制输出并将其传递到命令行并运行 - 但我试图将它放入我的 makefile 中,所以我有
@ECS_LOGIN =$(shell aws ecr get-login)
然后我试图在下一行执行它
$(ECS_LOGIN)
这就是我得到的地方
process_begin: CreateProcess(NULL, ECS_LOGIN =docker login -u AWS -p AQEC...HGZSSUMX4ftIpo8gY2 -e none https://123456789.dkr.ecr.us-east-1.amazonaws.com, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [docker-deploy] Error 2
通过研究其他问题,这似乎是从 windows Makefile运行时出现路径问题 错误 make (e=2): The system cannot find the file specified
但是在我aws ecr get-login工作之前的 docker 命令很好,即
docker build
所以它似乎特定于从变量中运行命令
那么如何从 make 运行此命令并解析路径?
完整的食谱
docker-deploy: docker-build
@ECS_LOGIN =$(shell aws ecr get-login)
$(ECS_LOGIN)
docker tag mytag:latest 123456789.dkr.ecr.us-east-1.amazonaws.com/mytag:latest
docker push 123456789.dkr.ecr.us-east-1.amazonaws.com/mytag:latest
首先,您需要决定要使用哪个工具来运行“aws ecr get-login”命令。在您的配方中,Make 运行它(并且您将结果分配给一个 shell 变量而不引用多字值,但我猜 Windows shell 可以接受它?)。在下一行中,您尝试引用shell变量,但忘记用美元引用美元符号,因此 make 替换调用配方时 ECS_LOGIN 的值(可能什么都没有)。
也许首先将第一行 ( ECS_LOGIN=$(shell aws ecr get-login)) 移出 shell 配方,看看是否有帮助:
ECS_LOGIN =$(shell aws ecr get-login)
docker-deploy: docker-build
@$(ECS_LOGIN)
docker tag mytag:latest 123456789.dkr.ecr.us-east-1.amazonaws.com/mytag:latest
docker push 123456789.dkr.ecr.us-east-1.amazonaws.com/mytag:latest
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
875 次 |
| 最近记录: |