I am trying to create a headless installation of LibreOffice under Windows Server Core 2016. My goal is to have a container that allow me to create on the fly documents based on templates. I have done it previously with a Linux-based image (something like this: https://hub.docker.com/r/xcgd/libreoffice/), but now I need the same to be run under Docker for Windows Server 2016.
I am able to make an unnatended installation of LibreOffice 5.3 under Windows Server Core from my Dockerfile:
RUN powershell -Command _
_ $ErrorActionPreference = ‘Stop’; \ _
_ Invoke-WebRequest -Method Get -Uri %LIBREOFFICE_URL% -OutFile c:\LibreOffice.msi ; _
_ Start-Process c:\LibreOffice.msi -ArgumentList ‘/qr /msoreg=0 ADDLOCAL=ALL CREATEDESKTOPLINKE=0 REGISTER_ALL_SMO_TYPES=1 REGISTER_DOC=1 INSTALLLOCATION=c:\LibreOffice REMOVE=gm_o_Onlineupdate,gm_p_Base,gm_p_Base_Bin,gm_o_Xsltfiltersamples RebootYesNo=No’ -Wait ; \ _
_ Remove-Item c:\LibreOffice.msi -Force
However LibreOffice does not work after installed:
CMD “C:\LibreOffice\program\soffice.exe -headless -accept=‘socket,host=127.0.0.1,port=8101;urp;’ -nofirststartwizard”
With no error message and no clue about the problem. I suppose is some related with the absense of GUI (despite the fact that the headless mode has been made to run LibreOffice as a service).
Has anyone tried to to the same?
I have solved the problem using LibreOffice 5.4.1
I’m looking to do the same thing. I can successfully start the container and see that LibreOffice is listening on the port, but my program hangs.
C:\>docker run -d --name some-office -p 8101:8101 libreoffice
C:\>netstat -nao|findstr -c:"8101"
TCP 127.0.0.1:8101 0.0.0.0:0 LISTENING 17264
I’m using the CLI interface via C# on the host machine.
var xLocalContext = uno.util.Bootstrap.defaultBootstrap_InitialComponentContext();
var xURLResolver = (XUnoUrlResolver)xLocalContext.getServiceManager().createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", xLocalContext);
// m_ServiceConnString = uno:socket,host=localhost,port=8101;urp;StarOffice.ComponentContext
var xRemoteContext = (XComponentContext)xURLResolver.resolve(m_ServiceConnString); //C# never returns from this line and doesn't error
var xRemoteFactory = (XMultiServiceFactory)xRemoteContext.getServiceManager();
Running an identical version of LibreOffice locally works fine. Any pointers you have would be greatly appreciated!
Could you try using the Docker image aytos/libreofffice:v1-windows? If it works ok for you, I can give you the Dockerfile.
We are using this image in several production environments and generating documents using it from a Java web application succesfully.
Thanks for the offer. I was able to figure out my issue: https://stackoverflow.com/q/48670724/402706, but I may take a look at your image anyway. Off hand, do you know if LibreOffice running headless in a Linux container can communicate successfully with a Windows machine. The windows container is massive by comparison, but I get “binary urp bridge disposed during call” with the Linux version of LibreOffice running in a Linux Container. This is why I went down the windows container route in the first place.