我需要将应用程序推送到需要通过NFS访问远程文件系统的Bluemix。
我还没找到任何NFS服务。现有的Object Store服务使用Swift API,应用程序需要本机文件系统访问,而不是其他类型的API。
我试图执行" mkdir"和#34; mount"来自应用程序初始化的命令,但似乎对运行运行时的用户执行此类执行存在限制。我得到的返回码代表错误。
所以我没有想法。您有什么建议或想法可供探索吗? 我认为Dockers可能是一个选择(如果我可以挂载nfs文件系统,还没有探索过),但目前它还处于测试阶段,所以没有生产就绪。
谢谢!
答案 0 :(得分:0)
不支持NFS,但Cloud Foundry现在支持FUSE,这是一种非常接近NFS的替代方案。
要利用FUSE,您需要使用cflinuxfs2
堆栈。
cflinuxfs2
是一个支持FUSE的新堆栈,见下文。 Cloud Foundry最近添加了FUSE支持,see here for more info。
name description
lucid64 Ubuntu 10.04
cflinuxfs2 Ubuntu 14.04.2 trusty
当您推送应用时,您需要使用-s
选项,例如下面的例子。
cf push myappname -s cflinuxfs2
。
<强>更新强>
海报在另一个问题上贴了solution来说明如何做到这一点。我把它贴在下面......
好的,最后我在团队同事的帮助下找到了问题的原因。问题在于私有ssh密钥的权限。它必须为600,默认情况下,在cf推送后为644。
所以这里是最终的代码(快速和肮脏),以防万一它对其他人有用......
1.-在应用程序中包含私钥和known_hosts文件。
2.-推动应用添加&#34; -s cflinuxfs2&#34;参数。
3.-在运行时执行启动一些代码,如下所示:
String s = null;
Process p = null;
BufferedReader br = null;
try
{
p = Runtime.getRuntime().exec("mkdir -p /home/vcap/misc");
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
while((s = br.readLine()) != null)
System.out.println("line: " + s);
p.waitFor();
System.out.println ("#### Executing command mkdir with exit: " + p.exitValue());
p.destroy();
br.close();
p = Runtime.getRuntime().exec("chmod 600 /home/vcap/app/wlp/usr/servers/defaultServer/apps/myapp.ear/cloud.key");
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
while((s = br.readLine()) != null)
System.out.println("line: " + s);
p.waitFor();
System.out.println ("#### Executing command chmod with exit: " + p.exitValue());
p.destroy();
br.close();
p = Runtime.getRuntime().exec("chmod 600 /home/vcap/app/wlp/usr/servers/defaultServer/apps/myapp.ear/known_hosts");
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
while((s = br.readLine()) != null)
System.out.println("line: " + s);
p.waitFor();
System.out.println ("#### Executing command chmod with exit: " + p.exitValue());
p.destroy();
br.close();
p = Runtime.getRuntime().exec("sshfs ibmcloud@129.41.133.34:/home/ibmcloud /home/vcap/misc -o IdentityFile=/home/vcap/app/wlp/usr/servers/defaultServer/apps/myapp.ear/cloud.key -o StrictHostKeyChecking=yes -o UserKnownHostsFile=/home/vcap/app/wlp/usr/servers/defaultServer/apps/myapp.ear/known_hosts -o idmap=user -o compression=no -o sshfs_debug");
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
while((s = br.readLine()) != null)
System.out.println("line: " + s);
p.waitFor();
System.out.println ("#### Executing command sshfs with exit: " + p.exitValue());
p.destroy();
br.close();
p = Runtime.getRuntime().exec("ls -l /home/vcap/misc");
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
while((s = br.readLine()) != null)
System.out.println("line: " + s);
p.waitFor();
System.out.println ("#### Executing command ls with exit: " + p.exitValue());
p.destroy();
br.close();
}
catch(IOException ex)
{
ex.printStackTrace();
}
catch(InterruptedException ex)
{
ex.printStackTrace();
}
finally
{
try
{
if(br != null)
br.close();
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
此代码段应创建一个文件夹,将远程文件系统挂载到该文件夹中,并列出远程文件系统的内容。