简体   繁体   English

我如何启动 tensorflow docker jupyter notebook

[英]How do I start tensorflow docker jupyter notebook

I've installed the tensorflow docker container on an ubuntu machine.我已经在 ubuntu 机器上安装了 tensorflow docker 容器。 The tensorflow docker setup instructions specify: tensorflow docker设置说明指定:

docker run -it b.gcr.io/tensorflow/tensorflow

This puts me into the docker container terminal, and I can run python and execute the Hello World example.这让我进入了 docker 容器终端,我可以运行 python 并执行 Hello World 示例。 I can also manually run .\\run_jupyter.sh to start the jupyter notebook.我也可以手动运行 .\\run_jupyter.sh 来启动 jupyter notebook。 However, I can't reach the notebook from host.但是,我无法从主机访问笔记本。

How do I start the jupyter notebook such that I can use the notebook from the host machine?如何启动 jupyter 笔记本,以便我可以从主机使用该笔记本? Ideally I would like to use docker to launch the container and start jupyter in a single command.理想情况下,我想使用 docker 来启动容器并在单个命令中启动 jupyter。

For a Linux host Robert Graves answer will work, but for Mac OS X or Windows there is more to be done because docker runs in a virtual machine.对于 Linux 主机,Robert Graves 的答案是可行的,但对于 Mac OS X 或 Windows,还有更多工作要做,因为 docker 在虚拟机中运行。

So to begin launch the docker shell (or any shell if you are using Linux) and run the following command to launch a new TensorFlow container:因此,要开始启动 docker shell(或任何 shell,如果您使用的是 Linux)并运行以下命令来启动一个新的 TensorFlow 容器:

docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow ./run_jupyter.sh

Then for Mac OS X and Windows you need to do the following only once:然后对于 Mac OS X 和 Windows,您只需执行以下操作一次:

  1. Open VirtualBox打开 VirtualBox
  2. Click on the docker vm (mine was automatically named "default")单击 docker vm(我的自动命名为“default”)
  3. Open the settings by clicking settings点击设置打开设置
  4. In the network settings open the port forwarding dialog在网络设置中打开端口转发对话框
  5. Click the + symbol to add another port and connect a port from your mac to the VM by filling in the dialog as shown below.单击 + 符号添加另一个端口,并通过填写对话框将端口从您的 mac 连接到 VM,如下所示。 In this example I chose port 8810 because I run other notebooks using port 8888.在这个例子中,我选择了端口 8810,因为我使用端口 8888 运行其他笔记本。 在此处输入图片说明
  6. then open a browser and connect to http://localhost:8810 (or whichever port you set in the host port section然后打开浏览器并连接到http://localhost:8810 (或您在主机端口部分设置的任何端口)
  7. Make your fancy pants machine learning app!制作您的花式裤子机器学习应用程序!

My simple yet efficient workflow:我简单而高效的工作流程:

TL;DR version: TL;DR 版本:

  1. Open Docker Quickstart Terminal .打开Docker 快速入门终端 If it is already open, run $ cd如果它已经打开,运行$ cd
  2. Run this once : $ docker run -it -p 8888:8888 -p 6006:6006 -v /$(pwd)/tensorflow:/notebooks --name tf b.gcr.io/tensorflow/tensorflow运行一次$ docker run -it -p 8888:8888 -p 6006:6006 -v /$(pwd)/tensorflow:/notebooks --name tf b.gcr.io/tensorflow/tensorflow
  3. To start every time: $ docker start -i tf每次都启动: $ docker start -i tf

If you are not on windows, you should probably change /$(pwd) to $(pwd)如果您不在 Windows 上,您可能应该将/$(pwd)更改为$(pwd)

You will get an empty folder named tensorflow in your home directory for use as a persistent storage of project files such as Ipython Notebooks and datasets.您将在主目录中获得一个名为tensorflow的空文件夹,用作项目文件(例如 Ipython Notebooks 和数据集)的持久存储。

Explanation:解释:

  1. cd for making sure you are in your home directory. cd以确保您位于主目录中。
  2. params:参数:
    • -it stands for interactive, so you can interact with the container in the terminal environment. -it代表interactive,所以你可以在终端环境中与容器进行交互。
    • -v host_folder:container_folder enables sharing a folder between the host and the container. -v host_folder:container_folder启用在主机和容器之间共享文件夹。 The host folder should be inside your home directory.主机文件夹应该在您的主目录中。 /$(pwd) translates to //c/Users/YOUR_USER_DIR in Windows 10. This folder is seen as notebooks directory in the container which is used by Ipython/Jupyter Notebook. /$(pwd)在 Windows 10 中转换为//c/Users/YOUR_USER_DIR 。此文件夹被视为容器中的notebooks目录,由 Ipython/Jupyter Notebook 使用。
    • --name tf assigns the name tf to the container. --name tf分配名称tf的容器。
    • -p 8888:8888 -p 6006:6006 mapping ports of container to host, first pair for Jupyter notebook, the second one for Tensorboard -p 8888:8888 -p 6006:6006将容器端口映射到主机,第一对用于 Jupyter notebook,第二对用于 Tensorboard
  3. -i stands for interactive -i代表交互式

Running TensorFlow on the cloud在云端运行 TensorFlow

After further reading of docker documentation I have a solution that works for me:进一步阅读docker 文档后,我有一个适合我的解决方案:

docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow ./run_jupyter.sh

The -p 8888:8888 and -p 6006:6006 expose the container ports to the host on the same port number. -p 8888:8888 和 -p 6006:6006 将容器端口暴露给相同端口号的主机。 If you just use -p 8888, a random port on the host will be assigned.如果您只使用 -p 8888,则会在主机上分配一个随机端口。

The ./run_jupyter.sh tells docker what to execute within the container. ./run_jupyter.sh 告诉 docker 在容器内执行什么。

With this command, I can use a browser on the host machine to connect to http://localhost:8888/ and access the jupyter notebook.使用此命令,我可以使用主机上的浏览器连接到http://localhost:8888/并访问 jupyter notebook。

UPDATE: After wrestling with docker on windows I switched back to a Ubuntu machine with docker.更新:在 Windows 上与 docker 搏斗后,我切换回了带有 docker 的 Ubuntu 机器。 My notebook was being erased between docker sessions which makes sense after reading more docker documentation.我的笔记本在 docker 会话之间被擦除,这在阅读更多 docker 文档后是有道理的。 Here is an updated command which also mounts a host directory within the container and starts jupyter pointing to that mounted directory.这是一个更新的命令,它还会在容器内挂载一个主机目录,并启动指向该挂载目录的 jupyter。 Now my notebook is saved on the host and will be available next time start up tensorflow.现在我的笔记本保存在主机上,下次启动 tensorflow 时就可以使用了。

docker run -p 8888:8888 -p 6006:6006 -v /home/rob/notebook:/notebook b.gcr.io/tensorflow/tensorflow sh -c "jupyter notebook /notebook"

These steps worked for me if you are a total docker noob using a windows machine.如果你是一个使用 Windows 机器的 docker noob,这些步骤对我有用。

Versions: Windows 8.1, docker 1.10.3, tensorflow r0.7版本:Windows 8.1、docker 1.10.3、tensorflow r0.7

  1. Run Docker Quickstart Terminal运行 Docker 快速入门终端
  2. After it is loaded, note the ip address.加载后,记下ip地址。 If you can't find it use this docker-machine ip and make a note.如果找不到,请使用此docker-machine ip并记下。 Lets call it 'ip address'.让我们称之为“IP地址”。 Will look something like this: 192.168.99.104 (I made up this ip address)看起来像这样:192.168.99.104(这个IP地址是我编的)
  3. Paste this command on the docker terminal:将此命令粘贴到 docker 终端上:

    docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow . docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow

    If you are running this for the first time, it will download and install the image on this light weight vm.如果您是第一次运行它,它将在这个轻量级虚拟机上下载并安装映像。 Then it should say 'The Jupyter notebook is running at ....' -> This is a good sign!然后它应该说'The Jupyter notebook is running at ....' -> 这是一个好兆头!

  4. Open your browser at: <your ip address (see above)>:8888 .打开您的浏览器: <your ip address (see above)>:8888 Eg.例如。 192.168.99.104:8888/ 192.168.99.104:8888/
  5. Hopefully you can see your ipython files.希望你能看到你的 ipython 文件。

Jupyter 现在可以为 TensorFlow 运行Docker 镜像

docker run -d -v $(pwd):/home/jovyan/work -p 8888:8888 jupyter/tensorflow-notebook

To get this to run under hyper-v.为了让它在 hyper-v 下运行。 Perform the following steps:执行以下步骤:

1) Create a docker virtual machine using https://blogs.msdn.microsoft.com/scicoria/2014/10/09/getting-docker-running-on-hyper-v-8-1-2012-r2/ this will get you a working docker container. 1)使用https://blogs.msdn.microsoft.com/scicoria/2014/10/09/getting-docker-running-on-hyper-v-8-1-2012-r2/创建一个docker虚拟机为您提供一个可用的 docker 容器。 You can connect to it via the console or via ssh.您可以通过控制台或 ssh 连接到它。 I'd put at least 8gb of memory since I'm sure this will use a lot of memory.我会放置至少 8GB 的​​内存,因为我确定这会占用大量内存。

2) run "ifconfig" to determine the IP address of the Docker VM 2)运行“ifconfig”来确定Docker VM的IP地址

3) On the docker shell prompt type: 3) 在 docker shell 提示符下键入:

docker run -p 8888:8888 -p 6006:6006 -it b.gcr.io/tensorflow/tensorflow docker run -p 8888:8888 -p 6006:6006 -it b.gcr.io/tensorflow/tensorflow

4) Connect to the Jupyter Workbench using http:/[ifconfig address]:8888/ 4) 使用 http:/[ifconfig address]:8888/ 连接到 Jupyter Workbench

To tidy up the things a little bit, I want to give some additional explanations because I also suffered a lot setting up docker with tensorflow.为了稍微整理一下,我想给出一些额外的解释,因为我在使用 tensorflow 设置 docker 时也遇到了很多麻烦。 For this I refer to this video which is unfortunately not selfexplanatory in all cases.为此,我参考了这个视频,不幸的是,它在所有情况下都不是不言自明的。 I assume you already installed docker.我假设您已经安装了 docker。 The really interesting general part of the video starts at minute 0:44 where he finally started docker.视频中真正有趣的一般部分从 0:44 分钟开始,他最终启动了 docker。 Until there he only downloads the tensorflow repo into the folder, that he then mounts into the container.在那里他只将 tensorflow repo 下载到文件夹中,然后他将其安装到容器中。 You can of course put anything else into the container and access it later in the docker VM.您当然可以将其他任何内容放入容器中,然后在 docker VM 中访问它。


  1. First he runs the long docker command docker run –dit -v /c/Users/Jay/:/media/disk –p 8000 –p 8888 –p 6006 b.gcr.io/tensorflow/tensorflow .首先,他运行长docker run –dit -v /c/Users/Jay/:/media/disk –p 8000 –p 8888 –p 6006 b.gcr.io/tensorflow/tensorflow命令docker run –dit -v /c/Users/Jay/:/media/disk –p 8000 –p 8888 –p 6006 b.gcr.io/tensorflow/tensorflow The “run” command starts containers. “run”命令启动容器。 In this case it starts the container “b.gcr.io/tensorflow/tensorflow”, whose address is provided within the tensorflow docker installation tutorial .在这种情况下,它启动容器“b.gcr.io/tensorflow/tensorflow”,其地址在tensorflow docker 安装教程中提供 The container will be downloaded by docker if not already locally available.如果本地尚不可用,则 docker 将下载该容器。 Then he gives two additional kinds of arguments: He mounts a folder of the hostsystem at the given path to the container.然后他提供了两种额外的参数: 他在给定的容器路径上挂载主机系统的文件夹。 DO NOT forget to give the partition in the beginning (eg. "/c/").不要忘记在开头给出分区(例如“/c/”)。 Additionally he declares ports being available later from the host machine with the params -p.此外,他使用 params -p 声明稍后可从主机使用的端口。 From all this command you get back the [CONTAINER_ID] of this container execution!从所有这些命令中,您将获得此容器执行的 [CONTAINER_ID]! You can always see the currently running containers by running “docker ps” in the docker console.您始终可以通过在 docker 控制台中运行“docker ps”来查看当前正在运行的容器。 Your container created above should appear in this list with the same id.您上面创建的容器应该以相同的 ID 出现在此列表中。


  2. Next Step: With your container running, you now want to execute something in it.下一步:随着容器的运行,您现在想要在其中执行一些操作。 In our case jupyter notebook or tensorflow or whatever: To do this you make docker execute the bash on the newly created container: docker exec –ti [CONTAINER_ID] bash .在我们的例子中,jupyter notebook 或 tensorflow 或其他:为此,您让 docker 在新创建的容器上执行 bash: docker exec –ti [CONTAINER_ID] bash This command now starts a bash shell on your container.此命令现在会在您的容器上启动 bash shell。 You see this because the “$” now changed to root@[CONTAINER_ID]:.你看到这个是因为“$”现在变成了 root@[CONTAINER_ID]:。 From here is no way back.从此无路可退。 If you want to get back to the docker terminal, you have to start another fresh docker console like he is doing in minute 1:10.如果你想回到 docker 终端,你必须像他在 1:10 分钟所做的那样启动另一个新的 docker 控制台。 Now with a bash shell running in the container you can do whatever you want and execute Jupiter or tensorflow or whatever.现在有了在容器中运行的 bash shell,你可以做任何你想做的事情,并执行 Jupiter 或 tensorflow 或其他任何东西。 The folder of the host system, you gave in the run command, should be available now under “/media/disk”.您在运行命令中给出的主机系统文件夹现在应该在“/media/disk”下可用。


  3. Last step accessing the VM output.访问 VM 输出的最后一步。 It still did not want to work out for me and I could not access my notebook.它仍然不想为我工作,我无法访问我的笔记本。 You still have to find the correct IP and Port to access the launched notebook, tensorboard session or whatever.您仍然需要找到正确的 IP 和端口才能访问已启动的笔记本、张量板会话或其他任何内容。 First find out the main IP by using docker-machine –ls .首先使用docker-machine –ls找出主IP。 In this list you get the URL.在此列表中,您可以获得 URL。 (If it is your only container it is called default.) You can leave away the port given here. (如果它是您唯一的容器,则称为默认容器。)您可以不使用此处给出的端口。 Then from docker ps you get the list of forwarded ports.然后从docker ps你得到转发端口的列表。 When there is written 0.0.0.32776->6006/tcp in the list, you can access it from the hostmachine by using the port given in the first place (Awkyard).当列表中写入 0.0.0.32776->6006/tcp 时,您可以使用首先提供的端口(Awkyard)从主机访问它。 So in my case the executed tensorboard in the container said “launched on port 6006”.所以在我的例子中,容器中执行的张量板说“在端口 6006 上启动”。 Then from my hostmachine I needed to enter http://192.168.99.100:32776/ to access it.然后从我的主机我需要输入http://192.168.99.100:32776/来访问它。

-> And that's it! -> 就是这样! It ran for me like this!就这样跑来找我!

It gives you the terminal prompt:它为您提供终端提示:

FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd vdocker') DO %i
docker run -it tensorflow/tensorflow:r0.9-devel

or或者

FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd vdocker') DO %i
docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel

You should have 'vdocker' or change vdocker to 'default'.您应该拥有“vdocker”或将 vdocker 更改为“default”。

For some reason I ran into one additional problem that I needed to overcome beyond the examples provided, using the --ip flag:出于某种原因,我遇到了一个额外的问题,我需要使用--ip标志来克服所提供的示例之外的问题:

nvidia-docker run --rm \
  -p 8888:8888 -p 6006:6006 \
  -v `pwd`:/root \
  -it tensorflow/tensorflow:latest-devel-gpu-py3 sh -c "jupyter notebook --ip 0.0.0.0 ."

And then I can access via http://localhost:8888 from my machine.然后我可以从我的机器上通过http://localhost:8888访问。 In some ways this makes sense;在某些方面,这是有道理的; within the container you bind to 0.0.0.0 which represents all available addresses.在容器内,您绑定到0.0.0.0代表所有可用地址。 But whether I need to do this seems to vary (eg I've started notebooks using jupyter/scipy-notebook without having to do this).但是我是否需要这样做似乎各不相同(例如,我已经开始使用jupyter/scipy-notebook而不必这样做)。

In any case, the above command works for me, might be of use to others.无论如何,上述命令对我有用,对其他人可能有用。

As an alternative to the official TensorFlow image, you can also use the ML Workspace Docker image.作为官方 TensorFlow 镜像的替代方案,您还可以使用ML Workspace Docker 镜像。 The ML Workspace is an open-source web IDE that combines Jupyter, VS Code, TensorFlow, and many other tools & libraries into one convenient Docker image. ML Workspace 是一种开源 Web IDE,它将 Jupyter、VS Code、TensorFlow 和许多其他工具和库结合到一个方便的 Docker 映像中。 Deploying a single workspace instance is as simple as:部署单个工作区实例非常简单:

docker run -p 8080:8080 mltooling/ml-workspace:latest

All tools are accessible from the same port and integrated into the Jupyter UI.所有工具都可以从同一个端口访问并集成到 Jupyter UI 中。 You can find the documentation here .您可以在此处找到文档。

A more elegant approach without port mapping 没有端口映射的更优雅的方法

Many answers above are really helpful and works, but in case that you just want to use docker on your host machine to build development environment (you are using jupyter afterall...), solutions above are more or less painful than you expected. 上面的许多答案确实很有帮助并且有效,但是如果您只想在主机上使用docker 来构建开发环境 (毕竟您正在使用jupyter ...),则上述解决方案或多或少会比您预期的痛苦。

Some painful facts 一些痛苦的事实

  1. If you are using port mapping: docker run -p 8888:8888 -p 6006:6006 ... , you will have to mannually map port everytime in advance. 如果您正在使用端口映射: docker run -p 8888:8888 -p 6006:6006 ... ,则每次必须手动手动映射端口。 If you forgot to expose a port, you have to abandom current container and re-create a new container with updated -p xxxx:xxxx . 如果您忘记公开端口,则必须放弃当前容器,并使用-p xxxx:xxxx重新创建一个新容器。

    Moverover, I am kind of guy who will open multiple projects with jupyter lab (in different containers) at the sametime. Moverover,我是一个会同时通过jupyter Lab(在不同容器中)打开多个项目的人。 Doing port mapping mannual is really discouraging. 手动进行端口映射确实令人沮丧。

  2. When you run jupyter lab (a better alternative to jupyter notebook), you will probably have to type jupyter lab --ip=0.0.0.0 --port=8888 in container (if you run container with bash) and eventually find out you cannot change jupyter lab theme to dark mode because of some permission issues. 当您运行jupyter lab(比jupyter笔记本更好的替代品)时,您可能必须在容器中键入jupyter lab --ip=0.0.0.0 --port=8888 (如果您使用bash运行容器),最终发现您无法由于某些权限问题,将Jupyter Lab主题更改为暗模式。 (light mode will make me blind XD) (灯光模式会使我盲目XD)

Better Solution 更好的解决方案

TL;DR TL; DR

Use --network="host" in your docker run 使用--network="host"docker run

If you use the host network mode for a container, that container's network stack is not isolated from the Docker host (the container shares the host's networking namespace), and the container does not get its own IP-address allocated. 如果将主机网络模式用于容器,则该容器的网络堆栈不会与Docker主机隔离(该容器共享主机的网络名称空间),并且该容器不会分配自己的IP地址。 For instance, if you run a container which binds to port 80 and you use host networking, the container's application is available on port 80 on the host's IP address. 例如,如果您运行一个绑定到端口80的容器,并且使用主机网络,则该容器的应用程序在主机IP地址上的端口80上可用。

ref: https://docs.docker.com/network/host/ 参考: https : //docs.docker.com/network/host/

(drop any space and comments after all '\\' before run it) (在运行它之前,请在'\\'之后删除所有空格和注释)

docker run -it -u $(id -u):$(id -g) \  # use same user as your host instead of using root user
               --rm \
               --network="host" \ # with this line, you don't have to map ports manually anymore
               tensorflow/tensorflow:latest-gpu-py3-jupyter \
               bash

when you are in container, you can launch jupyter labs without specifying ip/ports: 在容器中时,无需指定ip / port即可启动jupyter Labs:

jupyter lab

Example of building a ML enviroment for a project 为项目构建ML环境的示例

In this section, I share a detailed example, which is beyond what this question asked, but I think you will probably find it helpful. 在本节中,我将分享一个详细的示例,该示例超出了此问题的要求,但我认为您可能会发现它会有所帮助。

Files : 文件

folder structure: 文件夹结构:

.
├── Dockerfile
├── requirement.txt
└── run.sh

Dockerfile: Dockerfile:

FROM tensorflow/tensorflow:latest-gpu-py3-jupyter AS pre

WORKDIR /repo
RUN apt-get -qqy update && apt-get install -qqy \
    curl \
    npm \
    nodejs

FROM pre AS dev
COPY ./* /repo/
RUN mkdir /.jupyter  # make a directory for jupyter lab settings
RUN pip install --upgrade pip && pip install -r requirement.txt
RUN jupyter labextension install @jupyterlab/toc  # install table of content for juptyer lab
RUN chmod -R 777 /.local /.jupyter  # authenticate these 2 folders for current users

requirement.txt required.txt

pandas
scipy
scikit-learn
matplotlib
seaborn
kaggle
jupyterlab

run.sh: run.sh:

docker run -it -u $(id -u):$(id -g) \
               --rm \
               --network="host" \
               -v /$(pwd):/repo \
               -w /repo \
               --name $(basename $("pwd"))\
               $(basename $("pwd")):latest \
               bash

step: 步:

Build docker image and tag it with name of current folder: 构建docker映像并使用当前文件夹的名称对其进行标记:

docker build -t $(basename $("pwd")) .

run docker container: 运行docker容器:

bash run.sh

run jupyter lab in container: 在容器中运行jupyter实验室:

jupyter lab

Benefits of above example 上面例子的好处

  1. Now you don't need to do port mapping in advance anymore. 现在,您不再需要预先进行端口映射。 You can open jupyter, tensorboard as you wish anytime by just clicking the link. 您可以随时通过单击链接来打开jupyter,张量板。
  2. You are using same user as your host machine in the container instead of root user 您在容器中使用与主机相同的用户,而不是root用户
  3. Your current project is mounted on the container. 您当前的项目已安装在容器上。
  4. Jupyter Lab have been given permissions for any configurations Jupyter Lab已获得任何配置的权限
  5. All in all, this docker container is just as easy to use as a virtual environment 总而言之,此Docker容器与虚拟环境一样易于使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在 Tensorflow + Jupyter Notebook + GPU 中使用 docker-compose.yml - How do I use docker-compose.yml with Tensorflow + Jupyter Notebook + GPU Docker上的Tensorflow:如何在Jupyter笔记本上保存工作? - Tensorflow on Docker: How to save the work on Jupyter notebook? 运行tensorflow docker时如何更改jupyter笔记本端口? - How to change jupyter notebook port when running tensorflow docker? 我使用 Docker 在本地安装了 TensorFlow API(对象检测)。 如何在 Jupyter Notebook 中使用这个 package? - I installed a TensorFlow API (Object Detection) locally using Docker. How can I use this package in a Jupyter Notebook? docker 如何处理 jupyter notebook 的权限 - 3 种不起作用的方法 - docker how to handle permissions for jupyter notebook - 3 approaches that do not work 您如何在Microsoft / Cntk泊坞窗上看到Jupyter Notebook? - How do you see Jupyter notebook on a microsoft/cntk docker? 如何使用官方Tensorflow docker容器在主机目录中保存和编辑Jupyter笔记本? - How to save and edit a Jupyter notebook in a host directory using official Tensorflow docker container? 无法更改在 tensorflow docker 容器上运行的 jupyter 笔记本的工作目录 - Unable to change working directory for a jupyter notebook running on a tensorflow docker container 尝试使用 Docker jupyter/tensorflow-notebook 登录 Jupyter notebook 时令牌无效 - Invalid token when trying to login into Jupyter notebook with Docker jupyter/tensorflow-notebook 如何从服务器上的Docker访问Jupyter Notebook? - How to access jupyter notebook from docker on server?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM