簡體   English   中英

在Docker容器啟動時執行腳本

[英]Execute script when docker container start

我希望啟動帶有“ 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運行可執行文件

如何使用docker命令行實現它?

謝謝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是腳本,因此它的第一行是: #!/ bin / bash

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM