docker 容器端口转发行为用于 `run` 命令(用于 websockets)

docker 容器端口转发行为用于 `run` 命令(用于 websockets)

我在 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="*"'

相关内容