Docker输出镜像文件的一个错误

在执行 docker save -o ×××.tar 时出现写入空间不足的错误:

write .dockertemp048390495: no space left on device

在网上百度了一遍,发现出现空间不足的原因有很多,用系统命令查询后发现,不存在真实空间不足的问题,为了分析原因今天再进入系统测试了一遍,竟然没有再现错误,翻看前面执行过的命令,似乎是刚才的save命令是在根目录执行的,而以前是在当前用户目录下执行,切换到用户目录下执行save命令,问题重现。

通过实验得知,docker save命令是在当前目录下生成tar文件,如果当前目录有写入权限并没有空间限制,且确实磁盘有足够的空间,这个命令正确执行。我的问题是我的用户主目录空间没有定义好,以root身份cd到根目录后自然没有权限和空间限制。

由于docker是系统命令,实际可以先cd到想要存放文件的位置再执行命令,这样就不会出现各种不可预测的错误,还省去了命令后将文件移动到正确位置的操作。当然也可以直接在save命令中加上文件的绝对路径,如/aaa/bbb/ccc.tar,这样也会将生成的tar文件放入正确位置。

Vscodeserver如何配置Python环境

这几天用vscodeserver搭了一个远程编程环境,想用它来先写写Python,结果,因为配置不熟悉浪费了不少时间,更糟糕的是网上很多的文章都是误导。

首先,像大家认为的一样,vscode确实是简单有效,出厂做了很好的配置,安装过程很顺利。

其次,实际编程还是要简单设置一下,否则各种错误。

1、Code language not supported or defined

系统建好后,新建了一个文件,写了Python测试代码,点运行,结果显示Code language not supported or defined,网上各种解释都试了一遍无效。

后来没有办法,进入系统的帮助主页,里面有系统安装、如何开始的介绍视频,其实很简单,新建文件后修改文件名,一定要加上编程语言对应的后缀,其中python程序文件的后缀是.py,这样vscode就知道这是python,会自动调用系统可用的解释,我想其它语言应该一样处理。

2、ImportError: No module named XXX

系统可用后,运行程序显示没有相应的模块,真实的情况是存在两种可能,系统真的缺少模块或找不到模块路径。

进行系统后台,用pip install安装相应,运行后系统仍然显示上述错误,显然,系统不知道安装的模块在什么地方,需要配置环境路径,这个地方网络上很多方法不一定有效。我摸索出来的方法同样相当简单。

2.1 查询系统当前默认python解释器的情况

编写一个py程序,里面就一句,print(sys.path),然后运行,查看输出信息。或者直接在终端环境输入这条语句。

系统返回:

说明现在系统运行在Python2环境,而新版的vscode安装pip时实际将模块安装在Python3环境中。

2.2 修改配置文件

a 进入设置,选用户,然后找到扩展,选择Run Code Configuration

b 修改settins.json文件

点出打开settins.json文件,找到以下代码段:

"code-runner.executorMap": {

        "javascript": "node",
        "java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
        "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
        "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
        "objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
        "php": "php",
        "python": "python -u",
        "perl": "perl",
        "perl6": "perl6",
        "ruby": "ruby",

将其中的”python”: “python -u”,改成”python”: “python3 -u”,即可。关闭退出。重新运行程序,程序就可以Python3环境运行了。

nextcloud和onlyoffic

用Docker安装Nextcloud 出现无法连接外部数据库以及集成onlyoffice时报错,尤其是nextcloud和onlyoffice的集成几乎成了’世界性’难题,我尝试的一些方法也许可以供大家参与。

一、当前对这套系统的安装普遍的看法

1、两个软件不要在一个局域网内安装,更不能在同一台服务器上安装。

2、两个软件只能进行SSL安全连接,都要用CA证书或自签证书。

二、我折腾以后的几点体会

1、局域网安装可以,安装在同一台电脑上也可以。

2、用SSL以https连接可以,内网用ip连接也可以,用http连接还是可以的。

3、nextcloud这个软件在网络设计上有问题,最少不够聪明,应该尽快改进。对nextcloud 和onlyoffice地址格式要求不清楚,是最大的问题。

三、几个问题解决的基本经过

1.在使用nextcloud 集成onlyoffice时,会出现提示 :host violates local access rules

cd到/var/www/html/config,需要在配置文件 config.php 中增加下列语句,允许外网远程访问:

‘allow_local_remote_servers’ => true,

2.连接数据库提示错误,确认用户名密码正确,多试几次。这位网友的文章可供参考。

https://post.smzdm.com/p/a5kq92vk/

3、nextcloud集成onlyoffice时报错,一般安装步骤可以参考网络,错误会有各种信息,最后反复出现如下提示:

Error while downloading the document file to be converted.

这个时候,nextcloud和onlyoffice无论在内网还是在外网均能独立访问,单个软件内部操作都没有问题,就是没有办法将两个软件集成在一起,百度了全网多数环境不同不具有参考价值,但有两位网友的分析文章给了我很大的启发,他们的观点是:

a nextcloud集成onlyoffice文档服务器时,会根据你打开nextcloud时的环境生成文档服务器的请求链接。这句话的意思是要么按纯外网环境配置,要么按纯内网环境配置,如果集成链接地址中内外网地址混填,则很有可能两个软件不能正常交互。

b 生成的服务请求链接要在nextcloud和onlyoffice自身环境得到正确的域名(ip)解释。

c 最终所有的问题在于两者相互传递信息时能正确连接。

根据这个思路,做了两个重要改进:

第一,建立内网DNS SERVER,我是群晖系统比较方便,设置好后使得外网使用的域名在内网也能得到解释。这样做了之后,你无论是在外网还是在内网都能以域名访问。

第二,用不同的组合填入onlyoffice服务器设置的三个选项中,但一直不成功。

后来想到不接自己的服务器,先连一下onlyoffice的演示服务器,看看需要什么样的条件,发现“用于文档编辑服务内部请求的服务器的地址”需要填写正确的nextcloud外网地址。然后尝试在“文档编辑服务地址”填入onlyoffice服务器的外网地址,成功连接。中间那个可以不填。

4、还是在nextcloud中打开onlyoffice文件的问题

这次出现的问题是,两者都集成好了,平时使用也没有什么问题,但在单位内网连接到外网打开nextcloud中的office文档时,报告无法下载文件,文件无法保存并返回文件列表,问题的现象是nextcloud能调用onlyoffice,但onlyoffice打不开文件。

以上问题现象说明,nextcloud能与onlyoffice正确连接,但onlyoffice有问题,提示无法下载可能表示onlyoffice无法读取文件,而提示无法保存可能表示onlyoffice无法按设置找到存储文件的地方,这可能是一个网络连接问题。

回到局域网环境下调用onlyoffice,发现能顺利打开office文档,再回到外网环境下调用onlyoffice,发现问题解决。

结合前面安装集成onlyoffice时解决问题的过程,这种情况似乎还是一个网络访问的问题,两者集成是相互调用时地址解释的问题,而onlyoffice读取保存文件仍然有一个地址解释的问题,在单位内网连接外网时经过了多次NAT,又是用的域名访问,造成不能正确翻译IP地址,当在局域网用域名调用后,onlyoffice找到了域名对应的正确IP,再回外网调用时可以利用内部缓存正确找到外网中的服务器。

以上仅是推断,没有花时间去验证,可能不正确。

三、关于onlyoffice的中文字体

1、对编辑要求高的人,可以在系统fonts目录加入中文字体,onlyoffice字体下拉菜单长,设置字体的时候找到需要字体比较费劲,要求不高的人完全可以删除onlyoffice的自带的字体,利用系统字体就可以了。

cd /var/www/onlyoffice/documentserver/core-fonts/
rm -rf *

但建议/documentserver/core-fonts/目录中最少保留一个字体 ancient-scripts,这个是数学公式字体,如果删除写学术文章就不好办了。

2、添加进系统字体目录的中文字体最好不要用相关软件进行名称属性的修改,修改后在onyoffice中使用没有问题,但当你把写好的文件保存为docx等格式并下载到本地电脑上,再用微软office打开时就有可能会丢掉全部字体格式,因为word找不到对应的字体,如果中文字体来自windows,也不改动,则下载文件打开时word就能正确识别。

四、关于Nextcloud上传文件限制

我的系统信息中显示PHP对上传文件大小有限制:

为了证实实际限制情况,做了几个上传文件实验,最大传了一个1.5GB的文件,并没有实际的限制,并且传输速度也没有任何异常。所以,系统到底有没有文件大小的限制可以先试一下。

四、onlyoffice文档服务器限制连接服务

默认状态下onlyoffice文档服务器安装后是没有连接限制的,在可以外网访问的情况下,任何一台电脑输入服务器的地址都能连接上去,无限制的访问显然面临基本的安全问题。onlyoffice内部的配置文件有用于限制访问的内容,只要正确配置就可以增加安全性。

一种配置是用调用浏览器的地址来限制访问,只允许特定的IP访问onlyoffice服务器,这种配置方法用于公司比较合适。

另一种配置是设置JWT访问令牌,在配置文件设置好访问密钥,然后在nextcloud的集成插件中正确填入该密钥就可以了。

1、SSH进入系统后台,并修登入onlyoffice的容器内部。

2、用文本编辑器打开/etc/onlyoffice/documentserver/default.json

3、修改以下几项内容

此图像的alt属性为空;文件名为截屏2021-01-05-下午1.48.01.png

3.1 图中的几个红色的secret全部改成想要设置的密码。

3.2 将下面token中的browser、inbox、outbox三项改成true,原设置是false

4、在nextcloud的onlyoffice插件设置中,在密钥选项下的空格中填入上一步设置的密码。

五、几点说明:

1、系统环境,nextcloud和onlyoffice均是官方docker镜像最新版部署在群晖NAS上,数据库利用系统套件DB10,与其它程序共用。

2、两个软件均只映射http端口,没有使用证书,而是通过系统的反向代理安全连接到外网,所以上述地址是https。

3、通过测试表明,局域网环境两者相互连接情况复杂,以上措施实际是利用搭建内网域名服务器模拟了外网环境。如果不在外网使用,纯内网则直接用ip地址是可以连接的,而且只需要填“文档编辑服务地址”。

附两位网友的博文:

nextcloud+onlyoffice同局域网部署网络不通分析与解决(原创)https://www.jianshu.com/p/21ebf3ef5cfc

https://www.orgleaf.com/3589.html