我知道这个问题的多个实例已经存在,但我想就解决这个特定问题的最佳方法获得建议。我的命令是:
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
。我最好的选择是什么?
答案 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"