C# 从Docker容器中的LibreOffice Headless发送的TCP SYN_。

C# 从Docker容器中的LibreOffice Headless发送的TCP SYN_。,c#,docker,tcp,libreoffice,C#,Docker,Tcp,Libreoffice,我试图让LibreOffice在容器中以无头模式运行,这样我就可以在windows上使用它进行文档转换 通过以下方式在本地运行LibreOffice: C:\Program Files\LibreOffice 5\Program>soffice.exe-accept=“socket,host=127.0.0.1,port=8100;urp;”-nofirststartwizard-headless 在端口8100上生成正在运行的LibreOffice侦听实例 C:\ProgramFiles\L

我试图让LibreOffice在容器中以无头模式运行,这样我就可以在windows上使用它进行文档转换

通过以下方式在本地运行LibreOffice:

C:\Program Files\LibreOffice 5\Program>soffice.exe-accept=“socket,host=127.0.0.1,port=8100;urp;”-nofirststartwizard-headless

在端口8100上生成正在运行的LibreOffice侦听实例


C:\ProgramFiles\LibreOffice 5\Program>netstat-nao | findstr-C:“8100”
TCP 127.0.0.1:8100.0.0.0:0侦听28168

使用,然后我可以使用C#成功连接到正在运行的应用程序以转换文档

这一切都很好,但当我从windows容器运行同一版本的LibreOffice时,我的程序挂起在连接步骤上,从不超时或出错。请参阅下面的C代码片段

dockerfile

FROM microsoft/windowsservercore

ADD https://ftp.osuosl.org/pub/tdf/libreoffice/stable/5.4.4/win/x86_64/LibreOffice_5.4.4_Win_x64.msi .

RUN msiexec.exe /i LibreOffice_5.4.4_Win_x64.msi
RUN del LibreOffice_5.4.4_Win_x64.msi

EXPOSE 8100

ENTRYPOINT ["C:\\Program Files\\LibreOffice 5\\program\\soffice.exe"]
CMD ["-accept=\"socket,host=127.0.0.1,port=8100;urp;\"", "-headless", "-nofirststartwizard"]
docker命令

docker build -t libreoffice .
docker run -d -v C:\FileRepository:C:\FileRepository --name some-office -p 8100:8100 libreoffice
CONTAINER ID        IMAGE               COMMAND                    CREATED             STATUS
      PORTS                    NAMES
a2ad9cc76d8b        libreoffice         "C:\\Program Files\\Li…"   45 hours ago        Up 22 minutes
      0.0.0.0:8100->8100/tcp   some-office
C#

在转换期间不使用容器(本地LibreOffice)运行netstat显示:

使用容器在转换期间运行netstat显示:

>netstat -nao|findstr -c:"8100"
  TCP    127.0.0.1:8100         0.0.0.0:0              LISTENING       15924
  TCP    127.0.0.1:8100         127.0.0.1:58931        ESTABLISHED     15924
  TCP    127.0.0.1:58931        127.0.0.1:8100         ESTABLISHED     25124
  TCP    172.27.208.1:58932     172.27.216.35:8100     SYN_SENT        15924
作为一个不善于交际的人,我觉得这与容器的连接方式有关,
SYN_SENT
似乎意味着连接被阻塞,但我不能确定<代码>同步发送状态也仅持续几秒钟。我是docker的新手,所以我可能在创建和运行容器的过程中出错。任何帮助都会很好

环境

docker inspect --format "{{ .NetworkSettings.Networks.nat.IPAddress }}" some-office
172.27.216.35 // can't telnet to this ip with 8100 or ping.

docker inspect --format "{{ .NetworkSettings.Networks.nat.Gateway }}" some-office
172.27.208.1
  • 视窗10
  • Docker 17.12.0-ce-win47(15139)
  • 图书馆办公室5.4.4.2
  • Docker网络到主机
    nat
docker ps

docker build -t libreoffice .
docker run -d -v C:\FileRepository:C:\FileRepository --name some-office -p 8100:8100 libreoffice
CONTAINER ID        IMAGE               COMMAND                    CREATED             STATUS
      PORTS                    NAMES
a2ad9cc76d8b        libreoffice         "C:\\Program Files\\Li…"   45 hours ago        Up 22 minutes
      0.0.0.0:8100->8100/tcp   some-office
码头工人检查

docker inspect --format "{{ .NetworkSettings.Networks.nat.IPAddress }}" some-office
172.27.216.35 // can't telnet to this ip with 8100 or ping.

docker inspect --format "{{ .NetworkSettings.Networks.nat.Gateway }}" some-office
172.27.208.1
我明白了

连接到容器表明我可以telnet连接到容器中的LibreOffice

docker exec -ti some-office cmd

telnet 127.0.0.1 8100
e ? ?'com.sun.star.bridge.XProtocolPropertiesUrpProtocolProperties.UrpProtocol
PropertiesTidm???
但是,尝试通过容器的IP远程登录失败

docker exec -ti some-office cmd

C:\>telnet 172.27.216.25 8100
Connecting To 172.27.216.25...Could not open connection to the host, on port 8100: Connect failed
我将LibreOffice端口从127.0.0.1更改为0.0.0.0,这允许telnet通过容器的端口在容器内工作,也可以通过localhost:8100从主机工作

更改dockerfile并重新生成

CMD ["-accept=\"socket,host=0.0.0.0,port=8100;urp;\"", "-headless", "-nofirststartwizard"]
或通过以下方式创建容器:

docker run -d -v C:\FileRepository:C:\FileRepository --name some-office -p 8100:8100 libreoffice -accept=\"socket,host=0.0.0.0,port=8100;urp;\" -headless -nofirststartwizard
为感兴趣的人生成Dockerfile文件: