Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker中的bash文件不是';t执行_Bash_Shell_Ubuntu_Docker - Fatal编程技术网

docker中的bash文件不是';t执行

docker中的bash文件不是';t执行,bash,shell,ubuntu,docker,Bash,Shell,Ubuntu,Docker,我希望每当我运行docker映像时都能运行我的bash文件,因此首先我在一个新目录中创建了Dockerfile,比如说demo,在这个目录demo中我创建了一个新目录home,在这个目录中我有我的bash文件-testfile.sh。 这是我的docker文件- FROM ubuntu MAINTAINER Aman Kh COPY . /home CMD /home/testfile.sh 在使用命令构建时-sudo docker build-t amankh99/hello. 收到以下输出

我希望每当我运行docker映像时都能运行我的bash文件,因此首先我在一个新目录中创建了Dockerfile,比如说
demo
,在这个目录demo中我创建了一个新目录
home
,在这个目录中我有我的bash文件-
testfile.sh
。 这是我的docker文件-

FROM ubuntu
MAINTAINER Aman Kh
COPY . /home
CMD /home/testfile.sh
在使用命令构建时-
sudo docker build-t amankh99/hello.
收到以下输出-

Sending build context to Docker daemon 3.584kB
Step 1/4 : FROM ubuntu
—> 0458a4468cbc
Step 2/4 : MAINTAINER Aman Kh
—> Using cache
—> 98fbe31ed233
Step 3/4 : COPY . /home
—> Using cache
—> 7e52ff3439e2
Step 4/4 : CMD /home/testfile.sh
—> Using cache
—> 1d2660df6387
Successfully built 1d2660df6387
Successfully tagged amankh99/hello:latest
但当我用命令运行它时

sudo docker run --name test -it amankh99/hello
上面说

bin/sh:1:/home/testfile.sh:未找到

成功生成后,无法找到文件的原因。
我想在图像中转换这个容器,并希望推送docker hub,这样当我可以在运行hello world(sudo docker run hello world)时使用简单的run命令运行它时,我就会执行bash文件,因此,我可以对dockerfile进行哪些更改来实现这一点。

它也可以找到文件,但它不知道如何处理它,因为脚本的解释器(
#!…
位于脚本的第一行)不在docker映像中,或者它无法找到文件,因为该文件未被复制


您可以通过将
/bin/bash
作为最终参数传递给docker run命令来验证这一点,并在提示符下运行
ls-l/home/testfile.sh
和/或
/home/testfile.sh

它也可以找到该文件,但它不知道如何处理它,因为脚本的解释器(
#!…
在脚本的第一行)未出现在docker映像中,或者它无法找到该文件,因为它未被复制


您可以将
/bin/bash
作为最终参数传递给docker run命令,并在提示符下运行
ls-l/home/testfile.sh
和/或
/home/testfile.sh

OP的说明

我在一个新目录中创建了Dockerfile,比如说demo,在这个目录demo中我创建了一个新目录home,在这个目录中我有一个bash文件-testfile.sh

根据你的描述

demo/
+--- Dockerfile
+--- home/
     +--- testfile.sh
您需要将
home
目录复制到
/home

FROM ubuntu
COPY home /home
CMD /home/testfile.sh
如果执行此操作,您的
home/testfile.sh
将被复制到
/home/home/testfile.sh

如果只想复制
testfile.sh
,请执行此操作

COPY home/testfile.sh /home/

OP的描述

我在一个新目录中创建了Dockerfile,比如说demo,在这个目录demo中我创建了一个新目录home,在这个目录中我有一个bash文件-testfile.sh

根据你的描述

demo/
+--- Dockerfile
+--- home/
     +--- testfile.sh
您需要将
home
目录复制到
/home

FROM ubuntu
COPY home /home
CMD /home/testfile.sh
如果执行此操作,您的
home/testfile.sh
将被复制到
/home/home/testfile.sh

如果只想复制
testfile.sh
,请执行此操作

COPY home/testfile.sh /home/


之后运行chmod+x/home/testfile.sh
copy@aerokite:如果该模式不可执行,它将给出:
/bin/sh:1:/home/testfile.sh:权限被拒绝
看起来像是
testfile.sh
与Dockerfile不在同一目录中。请尝试:
sudo docker run-it amankh99/hello/bin/bash-c“ls-l/home”
是的..你是对的..你能在复制后检查运行ls-la/home吗?
在复制后运行chmod+x/home/testfile.sh
copy@aerokite:如果该模式不可执行,它将给出:
/bin/sh:1:/home/testfile.sh:权限被拒绝y:
sudo docker run-it amankh99/hello/bin/bash-c“ls-l/home”
。是的。。你是对的。
复制后,你能检查一下运行ls-la/home
吗?仔细阅读,他有一个主目录,然后在该目录中,他有脚本。@marcolzRight,这是最有可能的问题。@AerokiteThaks,这是我的功劳。@aerokite,我没有因为指出这一点而得到它。@abeltre1,我没有仔细阅读你的文章,他哈“这是一个主目录,然后在该目录中,他有脚本。@marcolzRight,这是最有可能的问题。@aerokiteThanks为信用证。@aerokite指出这一点我没有得到它。@abeltre1,我没有得到你。”