gpt4 book ai didi

bash - 使用docker exec执行主机上存在的Shell脚本时出现问题

转载 作者:行者123 更新时间:2023-12-02 19:26:56 24 4
gpt4 key购买 nike

我正在尝试在AWS EMR集群的主节点上执行脚本。目的是创建一个新的conda env并将其链接到jupyter。我正在跟踪AWS的this文档。问题是,无论脚本内容是什么,我都会遇到相同的错误:执行bash: /home/hadoop/scripts/bootstrap.sh: No such file or directory时出现sudo docker exec jupyterhub bash /home/hadoop/scripts/bootstrap.sh。我确定sh文件在正确的位置。

但是,如果我在容器内复制bootstrap.sh文件,然后运行相同的docker exec cmd,则工作正常。我在这里想念什么?我已经尝试过使用带有以下条目的简单脚本,但是会引发相同的错误:

#!/bin/bash
echo "Hello"

该文档明确指出:

Kernels are installed within the Docker container. The easiest way to accomplish this is to create a bash script with installation commands, save it to the master node, and then use the sudo docker exec jupyterhub script_name command to run the script within the jupyterhub container.

最佳答案

docker exec命令在容器的 namespace 内运行命令。这些 namespace 之一是文件系统。因此,除非该命令是镜像的一部分,或者直接写入容器,或者您已经安装了主机卷以将主机目录映射到容器中,否则将无法执行该命令。主机卷如下所示:

docker run -v /host/scripts:/container/scripts -n your_container $your_image
docker exec -it your_container /container/scripts/test.sh

该主机卷在主机和容器上可能是相同的路径。

如果它是Shell脚本,则可以使用I / O重定向,例如:
docker exec -i $container_id /bin/bash <local_script.sh

但请注意,由于脚本内容已将您的终端替换为stdin,因此您无法通过这种方式进行交互式操作。之所以可行,是因为容器内的shell只是在处理来自stdin的命令。

除了这些方案之外,除了AWS的文档似乎是错误的之外,我不知道该告诉您什么。

关于bash - 使用docker exec执行主机上存在的Shell脚本时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55494233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com