如何让外部运行的Jupyter Server访问Docker容器内的内容?
让外部Jupyter Server访问Docker容器内内容的几种方案
一、启动容器时挂载本地目录(首推)
这是最实用的方式,启动容器时把容器内需要访问的目录挂载到本地主机的某个路径,外部Jupyter Server直接访问本地挂载目录,就能和容器内的目录双向同步内容。
举个例子,要把容器内的/app/workspace目录挂载到本地的~/jupyter-shared,执行以下命令启动容器:
docker run -v ~/jupyter-shared:/app/workspace 你的镜像名称
之后在Jupyter里读写~/jupyter-shared下的文件,就等同于操作容器内的/app/workspace,两边的文件会实时同步。
二、通过端口映射访问容器内服务
如果容器内运行了文件服务(比如用Python启动的HTTP文件服务器),你可以在启动容器时映射端口,然后在Jupyter里通过网络请求访问容器内的内容。
比如容器内启动了一个监听8000端口的HTTP文件服务,启动容器时执行:
docker run -p 8080:8000 你的镜像名称
然后在Jupyter的代码里用requests库获取文件内容:
import requests file_content = requests.get('http://localhost:8080/data.txt').text
三、启动容器后复制文件(临时需求)
如果只是一次性需要获取容器内的文件,不用持续同步,直接用docker cp命令把容器内的文件复制到本地即可。
先查一下运行中容器的ID:
docker ps
然后执行复制命令,比如把容器内的/app/analysis.csv复制到本地~/jupyter-data:
docker cp 容器ID:/app/analysis.csv ~/jupyter-data
之后在Jupyter里直接访问本地的~/jupyter-data/analysis.csv就行。
方案选择建议
- 要是需要长期双向同步开发内容,直接在启动容器时配置挂载卷,一次配置永久生效。
- 要是需要实时访问容器内的服务型内容,用端口映射的方式,启动时配置端口即可。
- 临时取文件的话,启动容器后用
docker cp操作更省事。
内容的提问来源于stack exchange,提问作者Ahmad Nasser
相关产品推荐
相关产品推荐

