执行 docker run 后,在容器启动时运行 .sh 脚本

时间:2021-04-22 23:55:45

标签: docker

我知道这个问题的多个实例已经存在,但我想就解决这个特定问题的最佳方法获得建议。我的命令是:

docker run --gpus all --rm --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -eMODEL_NAME=xxxx -ti -v/home/xxxx/xxxx:/xxxx nvcr.io/nvidia/tensorflow:20.03-tf1-py3

现在一旦进入 docker,我想运行这些命令

cd /xxxx
apt-get update && apt-get install -y libcurl3 libcurl-openssl1.0-dev
export PYTHONPATH=`pwd`
touch /opt/tensorflow/horovod-source/.eggs/easy-install.pth
pip install tensorflow-probability==0.8
pip install xxxx
pip install opencv-python-headless
python ./xxxx/xxxx.py  --model_dir=xxx
exit

现在我如何将所有这些组合成一个脚本?我无权访问 Dockerfile,因为我使用的是 nvcr.io/nvidia/tensorflow:20.03-tf1-py3。我最好的选择是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用您的内容在 commands.sh 中创建一个名为 /home/xxxx/xxxx 的文件,然后在您的主机机器上运行以下命令:

chmod +x /home/xxxx/xxxx/commands.sh

现在使用以下命令运行容器:

docker run --gpus all --rm --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -eMODEL_NAME=xxxx -ti -v/home/xxxx/xxxx:/xxxx nvcr.io/nvidia/tensorflow:20.03-tf1-py3 sh /xxxx/commands.sh

答案 1 :(得分:0)

为了在 docker 中运行多个命令,请使用带分号的 /bin/bash -c ;

docker run image /bin/bash -c "cd /some/path; python a.py"

在这种情况下,仅当第一个命令 (cd) 没有返回错误或退出状态时,才会执行第二个命令 (python)。为避免这种情况,请使用 && 而不是 ; (分号)

docker run image /bin/bash -c "cd /some/path && python a.py"