开发者社区> 问答> 正文

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

我正在尝试在AWS EMR集群的主节点上执行脚本。目的是创建一个新的conda env并将其链接到jupyter。我正在关注AWS的这个文档。问题是,无论脚本的内容是什么,我都会遇到同样的错误: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"
该文件清楚地说:

内核安装在Docker容器中。完成此操作的最简单方法是使用安装命令创建bash脚本,将其保存到主节点,然后使用sudo docker exec jupyterhub script_name命令在jupyterhub容器中运行脚本。

展开
收起
小六码奴 2019-04-23 10:55:20 11815 0
2 条回答
写回答
取消 提交回答
  • Linux运维工程师,

    sudo docker exec jupyterhub bash /home/hadoop/scripts/bootstrap.sh

    这是对容器的操作,必须确保的是容器路径存在这个文件.

    2019-07-17 23:34:02
    赞同 展开评论 打赏
  • 该docker exec命令在容器的命名空间内运行命令。其中一个名称空间是文件系统。因此,除非命令是映像的一部分,直接写入容器,或者您已经安装了主机卷以将主机目录映射到容器中,否则您将无法执行它。主机卷可能如下所示:

    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 但请注意,由于脚本内容已将终端替换为标准输入,因此您无法以此方式执行交互式操作。这是有效的,因为容器内的shell只是处理来自stdin的命令。

    除了那些场景之外,我不知道除了来自AWS的文档似乎是错误的之外该告诉你什么。

    2019-07-17 23:34:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
应用 Docker 进行持续交付:用技术改变交付路程 立即下载
从Docker到容器服务 立即下载
Docker@Alibaba——超大规模Docker化的实战经验 立即下载