我有一个包含多台网络打印机的网络。这些打印机可在如下路径中使用:(\\ServerName\PrinterName 对于 Windows)。
我正在编写一个应用程序Java,只需将文件写入网络目录即可发送要打印的文档。
File fileToPrint = new File(fileName);
File printerFolder = new File(printerName);
try (FileInputStream fis = new FileInputStream(fileToPrint);
FileOutputStream fos = new FileOutputStream(printerFolder)) {
IOUtils.copy(fis, fos);
} catch (IOException e) {
throw new RuntimeException(e);
}
当我在位于网络上的计算机(Windows)上本地运行该程序时,此代码效果很好。Docker但是,如果我在 中运行 -container,这将停止工作wsl。
我的问题是:如何从容器访问网络目录Docker (它用作图像的基础linux)?
在 Linux 中,没有对 Windows 网络文件夹的文件访问权限。您可以连接对文件的访问,但不能连接对打印机的访问。
您可以尝试通过使用某些参数调用 smbclient 程序并通过它进行写入来进行打印。
典型的解决方案是运行杯子。将打印机连接到 cups。打印可以通过标准语言方法或通过 IPP 或 LPR 完成。
您还可以直接在 Windows 上安装 IPP 或 LPR 服务器。
我推荐IPP。
我用的是
CUPS-server。为此,我使用了Docker imageolbat/cupsd链接。我使用库连接到服务器
cups4j: