首页 > 解决方案 > 如何在没有 root 权限的 Docker 容器中运行 TensorBoard?

问题描述

我在 Docker 容器中运行 tensorflow-gpu。目前,当我使用 root 权限访问正在运行的 Docker 容器时,我只能运行和访问 TensorBoard。我想在不使用 root 权限的情况下完成此操作。如何实现?

这里有一些关于我在做什么和解决了什么问题的信息:

我使用以下命令使用 TensorFlow 提供的 docker 容器运行 tensorflow-gpu。

$ docker run \
-u $(id -u username):$(id -g username) \
-it --rm --runtime=nvidia \
-v $(realpath ~/data/workspace/notebooks):/tf/notebooks \
-v $(realpath ~/data/workspace/):/tf/workspace \
-v $(realpath ~/data/images/):/tf/images \
-p 8888:8888 -p 6007-6015:6007-6015 tensorflow/tensorflow:2.0.0a0-gpu-py3-jupyter

在启动容器的命令行中,我为 TensorBoard 添加了额外的端口。

在执行以下操作时,我完成了运行 TensorBoard。

  1. 容器正在运行(使用上面的命令启动)
    →每次尝试从正在运行的 Jupyter 笔记本中运行和访问 TensorBoard 都会失败
  2. 从 docker 主机 PC 我运行以下命令:
    • $ docker ps获取容器名称
    • $ sudo docker exec -it <container name> bash
      → 我试过这个有和没有sudo,没有下面的命令将不起作用
    • tf-docker /tf > tensorboard --logdir <log directory> --port 6007
  3. 现在我可以访问 TensorBoardlocalhost:6007

我是 Docker、TensorFlow 的新手,我是 Linux (Ubuntu) 的新手。我想在不使用 root 权限的情况下完成我上面描述的事情。

编辑 2019-06-24: 我不知道为什么它首先没有锻炼,也许我使用了错误的端口。这是我到现在为止所完成的。

编辑 2019-10-09: 由于将 TensorFlow 2.0.0 版本与 TensorBoard 2.0.0 一起使用,我必须启动 TensorBoard 以下内容:

$ tensorboard --logdir=<log directory> --host 0.0.0.0 --port 6006

如果不显式添加主机选项,它将不起作用。

标签: dockertensorflowtensorboardtensorflow-datasets

解决方案


我遵循的步骤,我可以用 tensorboard 可视化结果:

  • 创建容器时,打开/映射张量板的外部端口:
> nvidia-docker run -d --name tkra_tensorb --ipc=host -it -p 8513:8090
> -p 3014:6006 -v /data:/data tkra_tb
  • 在容器内,运行 tensorboard:
> tensorboard --logdir /data/tkra/MyDatasets/resnet101/checkpoints/
> --host 0.0.0.0 --port 6006

在我的浏览器中打开张量板:<server_address>:3014


推荐阅读