Docker容器启动时执行脚本

时间:2018-04-10 05:41:34

标签: bash

我想要启动带有“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命令,我可以在容器内使用'execuateble path'/'execuatble name'运行我的脚本,但是在命令行启动容器时我不能这样做

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 这是可以实现的,例如:

  1. 可以使用ENV设置路径,
  2. 可以使用ADD或COPY复制可执行文件
  3. 使用CMD或ENTRYPOINT运行可执行文件
  4. 如何使用docker命令行实现它?

1 个答案:

答案 0 :(得分:0)

感谢 melpomene

这是我的bash脚本,用于在复制它们之后自动执行容器内的脚本执行,所有这些都使用docker命令。

 # Start docker container
docker create --name mediainfo_docker centos:latest
# copy script files
docker cp . mediainfo_docker:/opt
# save container with the new image, which contains all scripts.
docker commit mediainfo_docker mediainfo_docker_with_scripts

# Now run scripts inside docker container
docker run -ti --rm  mediainfo_docker_with_scripts:latest /opt/deploy_mediainfo_lambda.sh

由于deploy_mediainfo_lambda.sh是一个脚本,因此第一行是:   #!/斌/庆典

相关问题