运行 Docker 容器时避免重复参数

乘风 tensorflow 440

原文标题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 脚本中,并提供命令行参数来从外部设置这些重复值。但这似乎不是一个好的解决方案,因为如果我想对容器进行其他操作,例如检查日志,我会使用 raw docker 命令。

我怀疑这个问题可能会被标记为基于意见的,但我还没有找到一个可以推荐给我的用户的好的解决方案。

原文链接:https://stackoverflow.com//questions/71594121/avoiding-duplicated-arguments-when-running-a-docker-container

回复

我来回复
  • ChrisM的头像
    ChrisM 评论

    正如用户 Ron van der Heijden 指出的那样,一种解决方案是将docker-compose.env文件中定义的环境变量结合使用。不错的答案。

    2年前 0条评论