【发布时间】:2018-04-16 12:20:05
【问题描述】:
我想启动带有“centos:latest”图像的容器并执行我的脚本。使用 docker cp 命令复制脚本。
docker create --name centos1 centos:latest
docker cp . 5db38b908880:/opt ---> scripts are in current directory, hence .
docker commit centos1 new_centos1 --> now new_centos1 image has scripts
现在我想用要执行的脚本启动新容器:我尝试了以下命令:
docker run -ti --rm --entrypoint "cd /opt && deploy_mediainfo_lambda.sh" new_centos1:latest
docker run -ti --rm new_centos1:latest "cd /opt && deploy_mediainfo_lambda.sh"
以上两个命令都失败了:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"cd /opt && deploy_mediainfo_lambda.sh\": stat cd /opt && deploy_mediainfo_lambda.sh: no such file or directory": unknown.
ERRO[0000] error waiting for container: context canceled
如果在启动容器时使用 bash 命令,我可以在容器内使用“可执行路径”/“可执行名称”运行我的脚本,但在命令行启动容器时我不能这样做
docker run -ti --rm new_centos1:latest bash
[root@c34207f3f1c4 /]# ./opt/deploy_mediainfo_lambda.sh
如果使用下面的命令,直接调用可执行文件,它会给出路径错误。
docker run -ti --rm new_centos1:latest "deploy_mediainfo_lambda.sh"
docker: Error response from daemon: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"deploy_mediainfo_lambda.sh\": executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled
也不确定在启动容器时从命令行设置 $PATH。
我知道,使用 Dockerfile 这是可以实现的,例如:
- 可以使用 ENV 设置路径,
- 可以使用 ADD 或 COPY 复制可执行文件
- 使用 CMD 或 ENTRYPOINT 运行可执行文件
如何使用 docker 命令行来实现?
【问题讨论】:
-
如果您将
"/opt/deploy_mediainfo_lambda.sh"作为命令传递会发生什么? -
它给出了以下错误:standard_init_linux.go:195: exec 用户进程导致“exec 格式错误”
-
deploy_mediainfo_lambda.sh的第一行是什么? -
导出语句如:export AWS_DEFAULT_OUTPUT=json
-
第一行应该指定一个解释器,例如
#!/bin/bash.
标签: bash