CRUGG
2019 年12 月 11 日 18:00
1
当我尝试启动 Discourse 时,无法在浏览器中访问它。我在日志文件中找到了一些可能导致此问题的信息。有人知道问题出在哪里吗?
# /var/discourse/standalone/log/rails/unicorn.stderr.log
报告错误失败:无法连接到 localhost:6379 上的 Redis (Errno::EADDRNOTAVAIL) 2 无法连接到 localhost:6379 上的 Redis (Errno::EADDRNOTAVAIL) 订阅失败,将在 1 秒后重新连接。调用堆栈 ["/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:362:in `rescue in establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:343:in `establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:106:in `block in connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:306:in `with_reconnect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:105:in `connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:381:in `ensure_connected'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:231:in `block in process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:319:in `logging'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:230:in `process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:139:in `block in call_loop'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:292:in `with_socket_timeout'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:138:in `call_loop'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/subscribe.rb:43:in `subscription'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/subscribe.rb:12:in `subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis.rb:3467:in `_subscription'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis.rb:2300:in `block in subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis.rb:52:in `block in synchronize'", "/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis.rb:52:in `synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis.rb:2299:in `subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus/backends/redis.rb:287:in `global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus.rb:721:in `global_subscribe_thread'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus.rb:669:in `block in new_subscriber_thread'"]
报告错误失败:无法连接到 localhost:6379 上的 Redis (Errno::EADDRNOTAVAIL) 3 作业异常:无法连接到 localhost:6379 上的 Redis (Errno::EADDRNOTAVAIL)
# /shared/standalone/log/var-log/redis/current
40:M 11 Dec 2019 17:46:24.868 # 警告:无法强制执行 TCP backlog 设置为 511,因为 /proc/sys/net/core/somaxconn 被设置为更低的值 128。
40:M 11 Dec 2019 17:46:24.868 # 服务器已初始化
40:M 11 Dec 2019 17:46:24.868 # 警告:overcommit_memory 设置为 0!在内存不足的情况下,后台保存可能会失败。要解决此问题,请将 'vm.overcommit_memory = 1' 添加到 /etc/sysctl.conf 中,然后重启系统,或运行命令 'sysctl vm.overcommit_memory=1' 以使更改生效。
40:M 11 Dec 2019 17:46:24.868 # 警告:您的内核已启用透明大页(THP)支持。这将导致 Redis 出现延迟和内存使用问题。要解决此问题,请以 root 身份运行命令 'echo never > /sys/kernel/mm/transparent_hugepage/enabled',并将其添加到 /etc/rc.local 中,以便在重启后保留该设置。禁用 THP 后必须重启 Redis。
40:M 11 Dec 2019 17:46:24.885 * 数据库已从磁盘加载:0.017 秒
40:M 11 Dec 2019 17:46:24.891 * 准备接受连接
如果这些非常长的日志行在这里难以阅读,我也将它们发布到了 hasteb.in:https://hasteb.in/cipemeki.rb
sam
(Sam Saffron)
2019 年12 月 11 日 23:35
2
这里有些奇怪。我建议您升级 Docker,重启服务器,然后重新构建 Discourse。
CRUGG
2019 年12 月 12 日 12:06
3
已成功使用 apt upgrade docker 升级了 Docker(之前并非最新版本),并通过 reboot 重启了服务器,然后使用 ./launcher rebuild app 重新构建(在重新构建过程中出现了一些 Redis 警告,但这些警告与 var-log/redis/current 文件中的警告基本相同),但我仍然无法访问我的网站。我尝试通过 Apache2 作为代理(ProxyPass)访问,返回了 503 错误;也尝试通过 IP 和 HTTP 端口访问(已禁用 HTTPS),浏览器则返回了“ERR_CONNECTION_REFUSED”错误。
这次 unicorn.stderr.log 仅输出了以下内容:
I, [2019-12-12T11:58:37.378657 #70] INFO -- : 正在刷新 Gem 列表
I, [2019-12-12T11:58:56.751681 #70] INFO -- : 正在监听 addr=127.0.0.1:3000 fd=9
I, [2019-12-12T11:59:04.682642 #70] INFO -- : 主进程已就绪
I, [2019-12-12T11:59:23.890076 #172] INFO -- : worker=0 已就绪
I, [2019-12-12T11:59:24.852000 #179] INFO -- : worker=1 已就绪
而 Redis 的 current 文件仍然像之前一样输出警告。
CRUGG
2019 年12 月 23 日 15:26
4
难道没人有解决办法吗?我还没找到修复这个问题的方法。
pfaffman
(Jay Pfaffman)
2019 年12 月 23 日 15:54
5
没有什么明显的。那 /var/discourse/shared/standalone/logs/rails/production.log 呢(如果我能输入的话)?
Falco
(Falco)
2019 年12 月 23 日 16:26
7
是 log 而不是 logs。你得帮帮我们,我们才能帮你……
CRUGG
2020 年1 月 7 日 19:05
9
我至今仍未找到解决此问题的方法。我也通过 Discourse 联系了一些论坛管理员,但似乎没有人遇到过这个问题。
bobhy
(Bob Hyman)
2020 年1 月 26 日 02:13
10
I am also having this issue.
In: unicorn.stdout.log:
Starting up 1 supervised sidekiqs
Loading Sidekiq in process id 4160
2020-01-25T19:29:16.281Z pid=4160 tid=orb7qpo9c ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
2020-01-25T19:29:16.288Z pid=4160 tid=orb7qpoj0 ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
2020-01-25T19:29:16.287Z pid=4160 tid=orb7rr8k4 ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
2020-01-25T19:29:16.283Z pid=4160 tid=orb7qpop4 ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
This is brand new Discourse install, standalone container with unix socket connection to outer nginx. I’m trying to embed Discourse in Ghost site for comments, the errors are correlated with displaying a post with a Discourse embed (and Discourse tries to queue a job to parse the referring page?) I had a similar config working for a year but that one blew up trying to upgrade, so I’m reconfiguring from (faulty) memory. Plenty of room for user error here …
Unicorn logs show redis connect error
production.log.txt (155.8 KB) unicorn.stderr.log.txt (14.5 KB)
redis itself seems happy (from standalone/log/var-log/redis/current) current.txt (37.0 KB)
and seems to be handling some connections on the expected port :6379. And some of the connections are from unicorn-worker, FWIW.
root@server3:/var/discourse/shared/standalone/log/var-log/redis# nsenter -t $(docker inspect -f '{{.State.Pid}}' app) -n netstat -ap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 2250/redis-server *
tcp 0 0 localhost.localdom:3000 0.0.0.0:* LISTEN 2280/unicorn master
tcp 0 0 0.0.0.0:postgresql 0.0.0.0:* LISTEN 2253/postmaster
tcp 0 0 localhost.localdo:45404 localhost.localdom:6379 ESTABLISHED 3004/unicorn worker
tcp 0 0 localhost.localdo:45448 localhost.localdom:6379 ESTABLISHED 2981/unicorn worker
tcp 0 0 localhost.localdom:6379 localhost.localdo:45408 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45346 localhost.localdom:6379 ESTABLISHED 2280/unicorn master
tcp 0 0 localhost.localdo:45456 localhost.localdom:6379 ESTABLISHED 3013/unicorn worker
tcp 0 0 localhost.localdom:3000 localhost.localdo:49628 TIME_WAIT -
tcp 0 0 localhost.localdo:45426 localhost.localdom:6379 ESTABLISHED 3022/unicorn worker
tcp 0 0 localhost.localdom:6379 localhost.localdo:45346 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45336 localhost.localdom:6379 ESTABLISHED 2280/unicorn master
tcp 0 0 localhost.localdom:6379 localhost.localdo:45392 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45458 localhost.localdom:6379 ESTABLISHED 3022/unicorn worker
tcp 0 0 localhost.localdo:45452 localhost.localdom:6379 ESTABLISHED 3004/unicorn worker
tcp 0 0 localhost.localdo:45380 localhost.localdom:6379 ESTABLISHED 2981/unicorn worker
tcp 0 0 localhost.localdom:6379 localhost.localdo:45410 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45390 localhost.localdom:6379 ESTABLISHED 2970/sidekiq 6.0.4
tcp 0 0 localhost.localdo:45374 localhost.localdom:6379 ESTABLISHED 2970/sidekiq 6.0.4
tcp 0 0 localhost.localdo:45420 localhost.localdom:6379 ESTABLISHED 3013/unicorn worker
tcp 0 0 localhost.localdom:6379 localhost.localdo:45400 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45390 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45332 localhost.localdom:6379 ESTABLISHED 2280/unicorn master
tcp 0 0 localhost.localdo:45392 localhost.localdom:6379 ESTABLISHED 2970/sidekiq 6.0.4
tcp 0 0 localhost.localdom:3000 localhost.localdo:49626 TIME_WAIT -
tcp 0 0 localhost.localdom:6379 localhost.localdo:45386 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45428 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45414 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45368 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45332 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45376 localhost.localdom:6379 ESTABLISHED 2970/sidekiq 6.0.4
tcp 0 0 localhost.localdo:45396 localhost.localdom:6379 ESTABLISHED 2970/sidekiq 6.0.4
tcp 0 0 localhost.localdom:6379 localhost.localdo:45418 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45448 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45388 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45374 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45408 localhost.localdom:6379 ESTABLISHED 3004/unicorn worker
tcp 0 0 localhost.localdo:45386 localhost.localdom:6379 ESTABLISHED 2981/unicorn worker
tcp 0 0 localhost.localdom:6379 localhost.localdo:45398 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45398 localhost.localdom:6379 ESTABLISHED 2970/sidekiq 6.0.4
tcp 0 0 localhost.localdom:6379 localhost.localdo:45430 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45394 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45458 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45456 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45420 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45396 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45394 localhost.localdom:6379 ESTABLISHED 2970/sidekiq 6.0.4
tcp 0 0 localhost.localdo:45368 localhost.localdom:6379 ESTABLISHED 2970/sidekiq 6.0.4
tcp 0 0 localhost.localdom:6379 localhost.localdo:45426 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45376 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45428 localhost.localdom:6379 ESTABLISHED 3022/unicorn worker
tcp 0 0 localhost.localdom:6379 localhost.localdo:45404 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45400 localhost.localdom:6379 ESTABLISHED 2970/sidekiq 6.0.4
tcp 0 0 localhost.localdo:45388 localhost.localdom:6379 ESTABLISHED 2970/sidekiq 6.0.4
tcp 0 0 localhost.localdo:45414 localhost.localdom:6379 ESTABLISHED 3013/unicorn worker
tcp 0 0 localhost.localdom:6379 localhost.localdo:45336 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45418 localhost.localdom:6379 ESTABLISHED 3013/unicorn worker
tcp 0 0 localhost.localdo:45384 localhost.localdom:6379 ESTABLISHED 2981/unicorn worker
tcp 0 0 localhost.localdom:6379 localhost.localdo:45384 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdo:45430 localhost.localdom:6379 ESTABLISHED 3022/unicorn worker
tcp 0 0 localhost.localdo:45410 localhost.localdom:6379 ESTABLISHED 3004/unicorn worker
tcp 0 0 localhost.localdom:6379 localhost.localdo:45380 ESTABLISHED 2250/redis-server *
tcp 0 0 localhost.localdom:6379 localhost.localdo:45452 ESTABLISHED 2250/redis-server *
tcp6 0 0 [::]:6379 [::]:* LISTEN 2250/redis-server *
tcp6 0 0 [::]:postgresql [::]:* LISTEN 2253/postmaster
udp 0 0 localhost.localdo:57631 localhost.localdo:57631 ESTABLISHED 2253/postmaster
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 10681809 2253/postmaster /var/run/postgresql/.s.PGSQL.5432
unix 3 [ ] DGRAM 10681045 2247/rsyslogd /dev/log
unix 2 [ ACC ] STREAM LISTENING 10682768 2257/nginx: master /shared/nginx.http.sock
unix 3 [ ] STREAM CONNECTED 10682773 2257/nginx: master
unix 3 [ ] STREAM CONNECTED 10682778 2257/nginx: master
unix 3 [ ] STREAM CONNECTED 10682772 2257/nginx: master
unix 3 [ ] STREAM CONNECTED 10682776 2257/nginx: master
unix 3 [ ] STREAM CONNECTED 10682770 2257/nginx: master
unix 3 [ ] STREAM CONNECTED 10682774 2257/nginx: master
unix 3 [ ] STREAM CONNECTED 10682775 2257/nginx: master
unix 2 [ ] DGRAM 10681046 2247/rsyslogd
unix 3 [ ] STREAM CONNECTED 10682777 2257/nginx: master
unix 3 [ ] STREAM CONNECTED 10682779 2257/nginx: master
unix 3 [ ] STREAM CONNECTED 10682771 2257/nginx: master
unix 3 [ ] STREAM CONNECTED 10766487 2970/sidekiq 6.0.4
unix 3 [ ] STREAM CONNECTED 10683830 2280/unicorn master
unix 3 [ ] STREAM CONNECTED 10764869 27949/postgres: 10/ /var/run/postgresql/.s.PGSQL.5432
unix 3 [ ] STREAM CONNECTED 10684631 2750/postgres: 10/m /var/run/postgresql/.s.PGSQL.5432
root@server3:/var/discourse/shared/standalone/log/var-log/redis#
我遇到了同样的问题。
我的日志文件中多次出现 localhost:6379 上的 EADDRNOTAVAIL 错误。如果需要,我可以提供日志内容。
pfaffman
(Jay Pfaffman)
2020 年2 月 6 日 00:55
12
这些连接问题是间歇性的,还是仅仅发生在容器启动时,即 Redis 在 Unicorn 之后启动的情况?
大家好,
我刚刚通过 SSH 更新了系统。
进入 /var/discourse 目录并执行了 ./launcher rebuild app。
现在所有页面都无法访问。
看起来无法连接到 Redis。
有什么建议吗?
来自汉堡的感谢,
René
pfaffman
(Jay Pfaffman)
2020 年3 月 12 日 21:57
16
检查磁盘空间?你有什么证据表明你没有连接到 Redis?
tao_oat
(Tao)
2020 年5 月 17 日 13:42
17
我在新的 Discourse Docker 安装中也遇到了同样的错误。之前一切正常,但我将其停用以配置 Postgres 12 并启用静态维护错误页面。现在,Discourse 无法再次运行。
问题似乎出在 Rails 连接 Redis 上。从 production.log 中可以看到:
Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack ["/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:363:in `rescue in establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:344:in `establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:106:in `block in connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:307:in `with_reconnect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:105:in `connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:382:in `ensure_connected'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:231:in `block in process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:320:in `logging'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:230:in `process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:125:in `call'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:915:in `block in get'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:51:in `block in synchronize'", "/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:51:in `synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:914:in `get'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus/backends/redis.rb:360:in `process_global_backlog'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus/backends/redis.rb:271:in `block in global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus/backends/redis.rb:284:in `global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus.rb:741:in `global_subscribe_thread'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus.rb:689:in `block in new_subscriber_thread'"]
Creating scope :open. Overwriting existing method Poll.open.
Creating scope :open. Overwriting existing method Poll.open.
Creating scope :open. Overwriting existing method Poll.open.
production_errors.log 为空。Redis 似乎正常启动。值得注意的是,syslog 中包含以下行:
May 17 13:35:30 wobbly-wiki-forum-app rsyslogd: imklog: cannot open kernel log (/proc/kmsg): Operation not permitted.
May 17 13:35:30 wobbly-wiki-forum-app rsyslogd: activation of module imklog failed [v8.1901.0 try https://www.rsyslog.com/e/2145 ]
May 17 13:35:30 wobbly-wiki-forum-app rsyslogd: [origin software="rsyslogd" swVersion="8.1901.0" x-pid="51" x-info="https://www.rsyslog.com"] start
我想知道这些是否可能表明存在问题?顺便提一下,服务器上有充足的可用内存和磁盘空间。
编辑:现已解决!我通过 nginx 反向代理运行,但没有完全按照 说明 操作。我忘记添加模板 "templates/web.socketed.template.yml",并且我还注释掉了 app.yml 中的整个 expose: 部分。现在它已经可以正常运行了。
Danran
(Dan Ran)
2023 年3 月 21 日 19:04
18
有人找到解决方案了吗?我在 Ubuntu Server 20.04 的纯 Docker 安装中遇到了此错误。我没有通过 Nginx 反向代理运行任何东西。我只是使用了默认的 Docker 安装脚本。