NPOI and X-Server
npfernandeztheillet opened this issue · 6 comments
Hi How are you? I hope you are doing well.
I'm trying to use this library in Linux server without X-Server. When I tried to use the method AutoSizeColumns I got this error:
System.NotSupportedException: Could not open display (X-Server required. Check your DISPLAY environment variable)
at System.Drawing.Graphics.FromHwnd(IntPtr hwnd)
at NPOI.SS.Util.SheetUtil.getDefaultCharWidth(IWorkbook wb)
at NPOI.SS.Util.SheetUtil.GetColumnWidth(ISheet sheet, Int32 column, Boolean useMergedCells)
Any suggestions?
Thanks!
+1. facing the same issue..
Error:
System.NotSupportedException: Could not open display (X-Server required. Check your DISPLAY environment variable)
at System.Drawing.Graphics.FromHwnd(IntPtr hwnd)
at NPOI.SS.Util.SheetUtil.getDefaultCharWidth(IWorkbook wb)
at NPOI.SS.Util.SheetUtil.GetColumnWidth(ISheet sheet, Int32 column, Boolean useMergedCells)
at NPOI.XSSF.UserModel.XSSFSheet.AutoSizeColumn(Int32 column, Boolean useMergedCells)
at NPOI.XSSF.UserModel.XSSFSheet.AutoSizeColumn(Int32 column)
at App.Excel.Exporting.ExcelBuilder`1.AutoSizeColumns(ISheet sheet)
Environment:
.net core 3.0
docker container (alpine)
Docker File entry:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-alpine as services
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
RUN apk --update add libgdiplus libx11-dev fontconfig ttf-dejavu --update-cache
Please note that this was working fine in .net core 2.2:
FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine as services
RUN apk add libgdiplus-dev fontconfig ttf-dejavu libc-dev --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted
hey everyone:
very unfortunate, facing the same issue..
i recomplie and reinstall in libgdiplus .but is dos`t work...
please help me :x
thanks for reading ~
Environment:
.net core 2.2
dotnetCore.NPOI version : 1.22
libgdiplus is yum installed .version:
Error:
System.NotSupportedException: Could not open display (X-Server required. Check your DISPLAY environment variable)
at System.Drawing.Graphics.FromHwnd(IntPtr hwnd)
at NPOI.SS.Util.SheetUtil.getDefaultCharWidth(IWorkbook wb)
at NPOI.SS.Util.SheetUtil.GetColumnWidth(ISheet sheet, Int32 column, Boolean useMergedCells)
at NPOI.XSSF.UserModel.XSSFSheet.AutoSizeColumn(Int32 column, Boolean useMergedCells)
System.NotSupportedException: Could not open display (X-Server required. Check your DISPLAY environment variable)
at System.Drawing.Graphics.FromHwnd(IntPtr hwnd)
at NPOI.SS.Util.SheetUtil.getDefaultCharWidth(IWorkbook wb)
at NPOI.SS.Util.SheetUtil.GetColumnWidth(ISheet sheet, Int32 column, Boolean useMergedCells)
at NPOI.XSSF.UserModel.XSSFSheet.AutoSizeColumn(Int32 column, Boolean useMergedCells)
LD_DEBUG:
21731: find library=libdl.so [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libdl.so
21731:
21731: /lib64/libdl.so.2: error: symbol lookup error: undefined symbol: DllMain (fatal)
21731: find library=libgdiplus.so [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/libgdiplus.so
21731: trying file=/lib64/libgdiplus.so
21731:
21731: find library=libglib-2.0.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libglib-2.0.so.0
21731:
21731: find library=libcairo.so.2 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libcairo.so.2
21731:
21731: find library=libfreetype.so.6 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libfreetype.so.6
21731:
21731: find library=libXrender.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libXrender.so.1
21731:
21731: find library=libX11.so.6 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libX11.so.6
21731:
21731: find library=libtiff.so.5 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libtiff.so.5
21731:
21731: find library=libjpeg.so.62 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libjpeg.so.62
21731:
21731: find library=libgif.so.4 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libgif.so.4
21731:
21731: find library=libpng15.so.15 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libpng15.so.15
21731:
21731: find library=libexif.so.12 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libexif.so.12
21731:
21731: find library=libfontconfig.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libfontconfig.so.1
21731:
21731: find library=libpixman-1.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libpixman-1.so.0
21731:
21731: find library=libEGL.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libEGL.so.1
21731:
21731: find library=libxcb-shm.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libxcb-shm.so.0
21731:
21731: find library=libxcb.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libxcb.so.1
21731:
21731: find library=libxcb-render.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libxcb-render.so.0
21731:
21731: find library=libXext.so.6 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libXext.so.6
21731:
21731: find library=libGL.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libGL.so.1
21731:
21731: find library=libbz2.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libbz2.so.1
21731:
21731: find library=libjbig.so.2.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libjbig.so.2.0
21731:
21731: find library=libSM.so.6 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libSM.so.6
21731:
21731: find library=libICE.so.6 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libICE.so.6
21731:
21731: find library=libexpat.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libexpat.so.1
21731:
21731: find library=libuuid.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libuuid.so.1
21731:
21731: find library=libxcb-dri2.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libxcb-dri2.so.0
21731:
21731: find library=libX11-xcb.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libX11-xcb.so.1
21731:
21731: find library=libxcb-dri3.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libxcb-dri3.so.0
21731:
21731: find library=libxcb-xfixes.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libxcb-xfixes.so.0
21731:
21731: find library=libxcb-present.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libxcb-present.so.0
21731:
21731: find library=libxcb-sync.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libxcb-sync.so.1
21731:
21731: find library=libxshmfence.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libxshmfence.so.1
21731:
21731: find library=libgbm.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libgbm.so.1
21731:
21731: find library=libwayland-client.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libwayland-client.so.0
21731:
21731: find library=libwayland-server.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libwayland-server.so.0
21731:
21731: find library=libdrm.so.2 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libdrm.so.2
21731:
21731: find library=libXau.so.6 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libXau.so.6
21731:
21731: find library=libglapi.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libglapi.so.0
21731:
21731: find library=libXdamage.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libXdamage.so.1
21731:
21731: find library=libXfixes.so.3 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libXfixes.so.3
21731:
21731: find library=libxcb-glx.so.0 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libxcb-glx.so.0
21731:
21731: find library=libXxf86vm.so.1 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libXxf86vm.so.1
21731:
21731: find library=libffi.so.6 [0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libffi.so.6
21731:
21731:
21731: calling init: /lib64/libffi.so.6
21731:
21731:
21731: calling init: /lib64/libXau.so.6
21731:
21731:
21731: calling init: /lib64/libxcb.so.1
21731:
21731:
21731: calling init: /lib64/libX11.so.6
21731:
21731:
21731: calling init: /lib64/libXext.so.6
21731:
21731:
21731: calling init: /lib64/libXxf86vm.so.1
21731:
21731:
21731: calling init: /lib64/libxcb-glx.so.0
21731:
21731:
21731: calling init: /lib64/libXfixes.so.3
21731:
21731:
21731: calling init: /lib64/libXdamage.so.1
21731:
21731:
21731: calling init: /lib64/libglapi.so.0
21731:
21731:
21731: calling init: /lib64/libdrm.so.2
21731:
21731:
21731: calling init: /lib64/libwayland-server.so.0
21731:
21731:
21731: calling init: /lib64/libwayland-client.so.0
21731:
21731:
21731: calling init: /lib64/libexpat.so.1
21731:
21731:
21731: calling init: /lib64/libgbm.so.1
21731:
21731:
21731: calling init: /lib64/libxshmfence.so.1
21731:
21731:
21731: calling init: /lib64/libxcb-sync.so.1
21731:
21731:
21731: calling init: /lib64/libxcb-present.so.0
21731:
21731:
21731: calling init: /lib64/libxcb-xfixes.so.0
21731:
21731:
21731: calling init: /lib64/libxcb-dri3.so.0
21731:
21731:
21731: calling init: /lib64/libX11-xcb.so.1
21731:
21731:
21731: calling init: /lib64/libxcb-dri2.so.0
21731:
21731:
21731: calling init: /lib64/libuuid.so.1
21731:
21731:
21731: calling init: /lib64/libICE.so.6
21731:
21731:
21731: calling init: /lib64/libSM.so.6
21731:
21731:
21731: calling init: /lib64/libjbig.so.2.0
21731:
21731:
21731: calling init: /lib64/libbz2.so.1
21731:
21731:
21731: calling init: /lib64/libGL.so.1
21731:
21731:
21731: calling init: /lib64/libxcb-render.so.0
21731:
21731:
21731: calling init: /lib64/libxcb-shm.so.0
21731:
21731:
21731: calling init: /lib64/libEGL.so.1
21731:
21731:
21731: calling init: /lib64/libpixman-1.so.0
21731:
21731:
21731: calling init: /lib64/libpng15.so.15
21731:
21731:
21731: calling init: /lib64/libfreetype.so.6
21731:
21731:
21731: calling init: /lib64/libfontconfig.so.1
21731:
21731:
21731: calling init: /lib64/libexif.so.12
21731:
21731:
21731: calling init: /lib64/libgif.so.4
21731:
21731:
21731: calling init: /lib64/libjpeg.so.62
21731:
21731:
21731: calling init: /lib64/libtiff.so.5
21731:
21731:
21731: calling init: /lib64/libXrender.so.1
21731:
21731:
21731: calling init: /lib64/libcairo.so.2
21731:
21731:
21731: calling init: /lib64/libglib-2.0.so.0
21731:
21731:
21731: calling init: /lib64/libgdiplus.so
21731:
21731: find librarlibX11.so y=[0]; searching
21731: search cache=/etc/ld.so.cache
21731: trying file=/lib64/libX11.so
21731:
21731: /lib64/libX11.so.6: error: symbol lookup error: undefined symbol: DllMain (fatal)
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: /usr/share/dotnet/shared/Microsoft.NETCore.App/2.2.1/libcoreclr.so: error: symbol lookup error: undefined symbol: PAL_LocalFree (fatal)
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731:
21731: find library=Microsoft.DiaSymReader.Native.amd64.dll [0]; searching
21731: search cache=/etc/ld.so.cache
21731: search path=/lib64/tls:/lib64:/usr/lib64/tls:/usr/lib64 (system search path)
21731: trying file=/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/lib64/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/tls/Microsoft.DiaSymReader.Native.amd64.dll
21731: trying file=/usr/lib64/Microsoft.DiaSymReader.Native.amd64.dll
Hi, thanks to these SO posts I was able to get it working again. Maybe this helps someone else too. Thanks for NPOI!
- https://stackoverflow.com/questions/57160657/x11-display-variable-is-not-set-cant-run-docker-image
- https://stackoverflow.com/questions/32151043/xvfb-docker-cannot-open-display
Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
# NPOI needs Libs for System.Drawing and an running X-Server (xvfb)
RUN apt-get update && apt-get install -y --allow-unauthenticated libgdiplus libc6-dev libx11-dev xvfb && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
ENV DISPLAY :10
COPY xvfb.init /etc/init.d/xvfb
# Removes any windows line endings because linux can`t start the service in this case
RUN sed -i -e 's/\r//g' /etc/init.d/xvfb
RUN chmod +x /etc/init.d/xvfb
RUN update-rc.d xvfb defaults
# In the end we need to start the xserver and our API, so run.sh starts them in the right order
ADD run.sh /run.sh
RUN chmod a+x /run.sh
COPY bin/Debug/netcoreapp3.0/publish/ app/
CMD /run.sh
xvfb.init
#!/bin/bash
#
# /etc/rc.d/init.d/xvfbd
#
# chkconfig: 345 95 28
# description: Starts/Stops X Virtual Framebuffer server
# processname: Xvfb
#
[ "${NETWORKING}" = "no" ] && exit 0
PROG="/usr/bin/Xvfb"
PROG_OPTIONS=":10 -ac"
PROG_OUTPUT="/tmp/Xvfb.out"
case "$1" in
start)
echo -n "Starting : X Virtual Frame Buffer "
$PROG $PROG_OPTIONS>>$PROG_OUTPUT 2>&1 &
disown -ar
;;
stop)
echo -n "Shutting down : X Virtual Frame Buffer"
killproc $PROG
RETVAL=$?
[ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb/var/run/Xvfb.pid
echo
;;
restart|reload)
$0 stop
$0 start
RETVAL=$?
;;
status)
status Xvfb
RETVAL=$?
;;
*)
echo $"Usage: $0 (start|stop|restart|reload|status)"
exit 1
esac
exit $RETVAL
run.sh
service xvfb start;
dotnet app/mydockerapp.dll
Hi, thanks to these SO posts I was able to get it working again. Maybe this helps someone else too. Thanks for NPOI!
- https://stackoverflow.com/questions/57160657/x11-display-variable-is-not-set-cant-run-docker-image
- https://stackoverflow.com/questions/32151043/xvfb-docker-cannot-open-display
Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 # NPOI needs Libs for System.Drawing and an running X-Server (xvfb) RUN apt-get update && apt-get install -y --allow-unauthenticated libgdiplus libc6-dev libx11-dev xvfb && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll ENV DISPLAY :10 COPY xvfb.init /etc/init.d/xvfb # Removes any windows line endings because linux can`t start the service in this case RUN sed -i -e 's/\r//g' /etc/init.d/xvfb RUN chmod +x /etc/init.d/xvfb RUN update-rc.d xvfb defaults # In the end we need to start the xserver and our API, so run.sh starts them in the right order ADD run.sh /run.sh RUN chmod a+x /run.sh COPY bin/Debug/netcoreapp3.0/publish/ app/ CMD /run.shxvfb.init
#!/bin/bash # # /etc/rc.d/init.d/xvfbd # # chkconfig: 345 95 28 # description: Starts/Stops X Virtual Framebuffer server # processname: Xvfb # [ "${NETWORKING}" = "no" ] && exit 0 PROG="/usr/bin/Xvfb" PROG_OPTIONS=":10 -ac" PROG_OUTPUT="/tmp/Xvfb.out" case "$1" in start) echo -n "Starting : X Virtual Frame Buffer " $PROG $PROG_OPTIONS>>$PROG_OUTPUT 2>&1 & disown -ar ;; stop) echo -n "Shutting down : X Virtual Frame Buffer" killproc $PROG RETVAL=$? [ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb/var/run/Xvfb.pid echo ;; restart|reload) $0 stop $0 start RETVAL=$? ;; status) status Xvfb RETVAL=$? ;; *) echo $"Usage: $0 (start|stop|restart|reload|status)" exit 1 esac exit $RETVALrun.sh
service xvfb start; dotnet app/mydockerapp.dll
thank u ~
after the Xvfb was installed ,it working !
@florianwachs Thanks. It's working for me.
I am working with asp.net 2.2 and it didn't work for me