当 运行 一个 Docker 容器时避免重复参数
Avoiding duplicated arguments when running a Docker container
我有一个 tensorflow 训练脚本,我想 运行 使用 Docker 容器(基于官方 TF GPU 图像)。尽管一切正常,运行将容器与脚本结合起来非常冗长和丑陋。主要问题是我的训练脚本允许用户指定训练期间使用的各种目录,用于输入数据、日志记录、生成输出等。我不想改变我的用户习惯,所以容器需要被告知这些用户定义目录的位置,因此它可以挂载它们。所以我最终得到这样的结果:
docker run \
-it --rm --gpus all -d \
--mount type=bind,source=/home/guest/datasets/my-dataset,target=/datasets/my-dataset \
--mount type=bind,source=/home/guest/my-scripts/config.json,target=/config.json \
-v /home/guest/my-scripts/logdir:/logdir \
-v /home/guest/my-scripts/generated:/generated \
train-image \
python train.py \
--data_dir /datasets/my-dataset \
--gpu 0 \
--logdir ./logdir \
--output ./generated \
--config_file ./config.json \
--num_epochs 250 \
--batch_size 128 \
--checkpoint_every 5 \
--generate True \
--resume False
在上面我将一个数据集从主机挂载到容器中,并且还挂载了一个配置文件config.json
(它配置了 TF 模型)。我将日志目录 logdir
和输出目录 generated
指定为卷。这些资源中的每一个也作为参数传递给 train.py
脚本。
这一切都非常丑陋,但我看不到另一种方法。当然,我可以将所有这些放在 shell 脚本中,并提供从外部设置这些重复值的命令行参数。但这似乎不是一个好的解决方案,因为如果我想对容器进行任何其他操作,例如检查日志,我会使用原始 docker 命令。
我怀疑这个问题可能会被标记为基于意见,但我还没有找到可以推荐给我的用户的好解决方案。
正如用户 Ron van der Heijden 指出的那样,一种解决方案是将 docker-compose
与 .env
文件中定义的环境变量结合使用。不错的回答。
我有一个 tensorflow 训练脚本,我想 运行 使用 Docker 容器(基于官方 TF GPU 图像)。尽管一切正常,运行将容器与脚本结合起来非常冗长和丑陋。主要问题是我的训练脚本允许用户指定训练期间使用的各种目录,用于输入数据、日志记录、生成输出等。我不想改变我的用户习惯,所以容器需要被告知这些用户定义目录的位置,因此它可以挂载它们。所以我最终得到这样的结果:
docker run \
-it --rm --gpus all -d \
--mount type=bind,source=/home/guest/datasets/my-dataset,target=/datasets/my-dataset \
--mount type=bind,source=/home/guest/my-scripts/config.json,target=/config.json \
-v /home/guest/my-scripts/logdir:/logdir \
-v /home/guest/my-scripts/generated:/generated \
train-image \
python train.py \
--data_dir /datasets/my-dataset \
--gpu 0 \
--logdir ./logdir \
--output ./generated \
--config_file ./config.json \
--num_epochs 250 \
--batch_size 128 \
--checkpoint_every 5 \
--generate True \
--resume False
在上面我将一个数据集从主机挂载到容器中,并且还挂载了一个配置文件config.json
(它配置了 TF 模型)。我将日志目录 logdir
和输出目录 generated
指定为卷。这些资源中的每一个也作为参数传递给 train.py
脚本。
这一切都非常丑陋,但我看不到另一种方法。当然,我可以将所有这些放在 shell 脚本中,并提供从外部设置这些重复值的命令行参数。但这似乎不是一个好的解决方案,因为如果我想对容器进行任何其他操作,例如检查日志,我会使用原始 docker 命令。
我怀疑这个问题可能会被标记为基于意见,但我还没有找到可以推荐给我的用户的好解决方案。
正如用户 Ron van der Heijden 指出的那样,一种解决方案是将 docker-compose
与 .env
文件中定义的环境变量结合使用。不错的回答。