“run”命令的docker容器端口转发行为(对于websockets)

我正在Docker容器中运行一个ipython笔记本服务器。 从浏览器运行在笔记本内部的代码在websocket上运行,websocket必须从容器外部(浏览器)连接到内部运行的龙卷风服务器。

我注意到,当我用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图像?

看来你的ipython命令需要在bash中运行 – 你应该检查你的ENTRYPOINT的ENTRYPOINT,直接运行ipython不会为你工作。

通过/斌/ bashdocker运行命令,以便testing:

 docker run -p 9000:9000 username/image /bin/bash -c 'ipython notebook --port=9000 --ip="*"'