如何在没有root特权的情况下在Docker容器中运行TensorBoard?

时间:2019-06-23 06:42:09

标签: docker tensorflow tensorboard tensorflow-datasets

我正在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. 现在我可以在localhost:6007上访问TensorBoard

我是Docker,TensorFlow的新手,并且是Linux(Ubuntu)的新手。 我想在不使用root特权的情况下完成上述操作。

  • 有没有办法做到这一点?
  • 什么是最好/正确的方法?
  • 您的最佳做法建议是什么?

编辑2019-06-24: 我不知道为什么一开始没有锻炼,也许我使用了错误的端口。这是我到目前为止所完成的。

  • 我使用以下命令行启动容器,其中我将TensorBoard的端口更改为6006
    $ 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 6006:6006 tensorflow/tensorflow:2.0.0a0-gpu-py3- 
    jupyter
    
  • 然后从命令行启动docker容器内的bash shell,而不使用root特权:$ docker exec -it <container name> bash
  • 之后,我启动TensorBoard并使用Web浏览器中的输出链接:tf-docker /tf > tensorboard --logdir <log directory> --port 6007
  • 代替先前的命令,我还可以从Jupyter笔记本启动Tensorboard。
    %reload_ext tensorboard.notebook
    %tensorboard --logdir=<log directory> --port=6006
    

1 个答案:

答案 0 :(得分:0)

我遵循的步骤,我可以用张量板将结果可视化:

  • 在创建容器时,为张量板打开/映射一个外部端口:
<块引用>
> 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

在浏览器中打开张量板::3014