我在 Synology NAS 上安装了 Docker。 我创建了一个运行 ubuntu 的容器,该 ubuntu 运行网站服务器。
为了启动我的服务(名为“dodoc”),我使用 npm 和 pm2。
因此,当我的容器启动时,我必须手动打开容器终端并运行以下命令:
cd /home
pm2 start dodoc
pm2 startup
然后,它就完美地工作了。
问题是我想在容器启动时自动启动该服务。通常,pm2 保存就可以了。但在 Synology NAS 上却不起作用,不知道为什么。
所以...我尝试了一种不同的方法: 在我的容器上使用 shell 脚本作为 CMD。
所以我的容器 CMD 行是:
/bin/bash -c /root/Documents/startupCommands.sh
像这样,我的容器确实在启动时运行我的脚本,但是该脚本不起作用,而如果我通过终端手动运行它,它就可以工作。
脚本(名为“startupCommands.sh”):
#!/bin/bash
cd /home && pm2 start dodoc
cd /home && pm2 startup
/bin/bash
在 NAS Synology 上,我们必须在 NAS 上设置容器可以访问的目录。 我可以放置脚本文件的目录位于容器终端的 /root/Documents 中。 但是,我的服务是在 /home 运行的。 为什么我将脚本放在不同的目录中?因为在 Synology NAS 上,您必须在创建容器时设置 CMD 行,并且之后无法修改。因此,如果您尝试运行尚不存在的 script.sh,容器将无限期地重新启动。因此,您必须将脚本文件放在您可以访问的目录中,而无需使用容器终端。
好吧...如果我在终端中手动执行以下命令,它就会起作用:
root@ubuntu-dodoc10:/home# /root/Documents/startupCommands.sh
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /home/dodoc in fork_mode (1 instance)
[PM2] Done.
但是,如果我查看容器日志,这就是启动时发生的情况:
]0;root@ubuntu-dodoc10: /homeroot@ubuntu-dodoc10:/home#
/root/Documents/startupCommands.sh: line 4: pm2: command not found
/root/Documents/startupCommands.sh: line 5: pm2: command not found
很明显,服务器没有启动......
我已经尝试过:
没有任何效果:'(
“Dokerfile”:
{
"CapAdd" : null,
"CapDrop" : null,
"cmd" : "/bin/bash -c /root/Documents/startupCommands.sh",
"cpu_priority" : 50,
"enable_publish_all_ports" : false,
"enable_restart_policy" : true,
"enable_service_portal" : null,
"enabled" : true,
"env_variables" : [
{
"key" : "PATH",
"value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
}
],
"exporting" : false,
"id" : "4fc2468eaf2a84c57ddb25f1818cdef6650a792d67ac6ad7d5d69e8fd470f8c0",
"image" : "ubuntu:latest",
"is_ddsm" : false,
"is_package" : false,
"links" : [],
"memory_limit" : 1073741824,
"name" : "ubuntu-dodoc-test",
"network" : [
{
"driver" : "host",
"name" : "host"
}
],
"network_mode" : "host",
"port_bindings" : [],
"privileged" : false,
"shortcut" : {
"enable_shortcut" : false,
"enable_status_page" : false,
"enable_web_page" : false,
"web_page_url" : ""
},
"use_host_network" : true,
"volume_bindings" : [
{
"host_volume_file" : "/docker/dodoc",
"mount_point" : "/root/Documents",
"type" : "rw"
}
]
}
pm2: command not found
。这看起来很清楚。
pm2
?PATH
吗?您可以在脚本中添加一些调试语句,例如
cd /home
echo -n 'cd-ed to '
pwd
echo -n "Trying to execute pm2:"
which pm2
echo $PATH
pm2 start dodoc
pm2 startup
帮助您回答上面列表中的问题。