我在 docker 容器内运行 ipython 笔记本服务器。从浏览器运行笔记本内的代码通过 websockets 进行,websockets 必须从容器外部(浏览器)连接到容器内运行的 tornado 服务器。
docker run
我注意到当我直接用命令启动笔记本服务器时
$ docker run -p 9000:9000 username/image ipython notebook --port=9000 --ip="*"
我无法建立连接(ipython 笔记本内核连接超时)。当我在 docker 容器中启动 shell 并在容器内运行相同的命令时,连接完美运行:
$ docker run -it -p 9000:9000 username/image /bin/bash
$ ipython notebook --port=9000 --ip="*" # inside docker image
在这两种情况下,ipython 服务器日志都包含如下条目
Connecting to: tcp://127.0.0.1:39946
用于 websocket 连接。
run
这使得编写脚本和自动运行容器变得更加困难。我该怎么做才能直接从镜像中获得与第二种情况相同的行为?
答案1
似乎你的ipython
命令需要在 bash 中运行 - 你应该检查ENTRYPOINT
你的 Dockerfile,ipython
直接运行不适用于你。
将 /bin/bash 传递给 docker run 命令,如下所示进行测试:
docker run -p 9000:9000 username/image /bin/bash -c 'ipython notebook --port=9000 --ip="*"'