Docker总是有一个USER命令来作为特定用户运行进程,但一般来说很多东西必须作为ROOT运行.
我已经看到很多图像使用ENTRYPOINTwith gosu来提升运行过程.
对于需要,我仍然有点困惑gosu.用户不应该够吗?
我知道在Docker 1.10的安全性方面有很多变化,但我仍然不清楚在docker容器中运行进程的推荐方法.
有人可以解释我什么时候使用gosuvs.USER
谢谢
编辑:
Docker 最佳实践指南不是很清楚:它说如果进程可以在没有特权的情况下运行,请使用USER,如果你需要sudo,你可能想要使用gosu.这是令人困惑的,因为人们可以在ROOT中安装各种东西Dockerfile,然后创建一个用户并赋予它适当的权限,然后最终切换到该用户并运行该CMD用户.那么为什么我们需要sudo gosu呢?
我正在使用amazon ec2 ubuntu 11.04服务器
sudo pip install python-snappy
Run Code Online (Sandbox Code Playgroud)
我也尝试下载包并输入"sudo python setup.py install"
我收到了错误:
running build
running build_ext
building 'snappy' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c snappymodule.cc -o build/temp.linux-x86_64-2.7/snappymodule.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]
snappymodule.cc:31:22: fatal error: snappy-c.h: No such file or directory
compilation terminated.
error: command 'gcc' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)
我怎么能摆脱这个错误?
使用Spark 1.4.0,Scala 2.10
我一直试图找出一种方法来使用最后一次已知的观察来转发填充空值,但我没有看到一种简单的方法.我认为这是一件非常常见的事情,但找不到显示如何执行此操作的示例.
我看到函数向前转移填充NaN的值,或滞后/超前函数来填充或移位数据偏移量,但没有任何东西可以获取最后的已知值.
在线查看,我在R中看到很多关于同一件事的Q/A,但在Spark/Scala中没有.
我正在考虑在日期范围内进行映射,从结果中过滤出NaN并选择最后一个元素,但我想我对语法感到困惑.
使用DataFrames我尝试类似的东西
import org.apache.spark.sql.expressions.Window
val sqlContext = new HiveContext(sc)
var spec = Window.orderBy("Date")
val df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true").load("test.csv")
val df2 = df.withColumn("testForwardFill", (90 to 0).map(i=>lag(df.col("myValue"),i,0).over(spec)).filter(p=>p.getItem.isNotNull).last)
Run Code Online (Sandbox Code Playgroud)
但这并没有让我任何地方.
过滤器部分不起作用; map函数返回一个spark.sql.Columns序列,但是filter函数需要返回一个Boolean,所以我需要从Column中获取一个值来测试,但似乎只有Column方法返回一个Column.
有没有办法在Spark上更"简单"地做到这一点?
感谢您的输入
编辑:
简单示例示例输入:
2015-06-01,33
2015-06-02,
2015-06-03,
2015-06-04,
2015-06-05,22
2015-06-06,
2015-06-07,
...
Run Code Online (Sandbox Code Playgroud)
预期产量:
2015-06-01,33
2015-06-02,33
2015-06-03,33
2015-06-04,33
2015-06-05,22
2015-06-06,22
2015-06-07,22
Run Code Online (Sandbox Code Playgroud)
注意:
编辑:
按照@ zero323的回答我试过这样:
import org.apache.spark.sql.Row
import org.apache.spark.rdd.RDD
val rows: RDD[Row] = df.orderBy($"Date").rdd
def notMissing(row: Row): Boolean = { !row.isNullAt(1) } …Run Code Online (Sandbox Code Playgroud) 在我的iOS应用程序中,我有一个UIWebView.
现在我希望所有具有属性target ="_ blank"的链接不在我的WebView中打开,而是在Safari中外部打开.
我怎样才能做到这一点?
在GKE上,kube-dns在我的节点上运行,我可以看到docker容器.
我可以通过名称访问服务,这对于所有这些负载平衡是非常合适的解决方案的应用程序非常有用,但我如何使用DNS访问各个pod?
我知道我可以在API中查找特定的pod,但我需要自己更新hosts文件,并继续观看pod列表.DNS应该为我这样做,所以如何在pod中使用它?
Kubernetes doc说DNS信息需要传递给kubelet,但是我无法访问我知道的GKE上的内容,所以它只是没有在GKE上设置那样或者有什么办法可以激活它吗?
我的一些服务(特别是zookeeper)自己知道其他节点,并尝试通过主机名(即pod名称)连接到它们,并且除非我hosts自己更新文件,否则会失败.我想使用集成的DNS服务.
任何关于如何做到这一点的指导将不胜感激.
谢谢
试图在DataFrame中删除一列,但我有一些带有点的列名,我将其转义.
在我逃避之前,我的架构看起来像这样:
root
|-- user_id: long (nullable = true)
|-- hourOfWeek: string (nullable = true)
|-- observed: string (nullable = true)
|-- raw.hourOfDay: long (nullable = true)
|-- raw.minOfDay: long (nullable = true)
|-- raw.dayOfWeek: long (nullable = true)
|-- raw.sensor2: long (nullable = true)
Run Code Online (Sandbox Code Playgroud)
如果我尝试删除列,我得到:
df = df.drop("hourOfWeek")
org.apache.spark.sql.AnalysisException: cannot resolve 'raw.hourOfDay' given input columns raw.dayOfWeek, raw.sensor2, observed, raw.hourOfDay, hourOfWeek, raw.minOfDay, user_id;
at org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.failAnalysis(package.scala:42)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$2.applyOrElse(CheckAnalysis.scala:60)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$2.applyOrElse(CheckAnalysis.scala:57)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:319)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:319)
at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:53)
Run Code Online (Sandbox Code Playgroud)
请注意,我甚至没有试图在名称上删除带有点的列.因为在没有转义列名的情况下似乎无法做很多事情,所以我将模式转换为:
root
|-- user_id: long …Run Code Online (Sandbox Code Playgroud) 我在LXC容器内的机器上有3个DataNode和1个NameNode.与NameNode在同一节点上的DataNode工作正常,但另外2个不能得到:
Initialization failed for Block pool BP-232943349-10.0.3.112-1417116665984
(Datanode Uuid null) service to hadoop12.domain.local/10.0.3.112:8022
Datanode denied communication with namenode because hostname cannot be resolved
(ip=10.0.3.233, hostname=10.0.3.233): DatanodeRegistration(10.0.3.114,
datanodeUuid=49a6dc47-c988-4cb8-bd84-9fabf87807bf, infoPort=50075, ipcPort=50020,
storageInfo=lv=-56;cid=cluster24;nsid=11020533;c=0)
Run Code Online (Sandbox Code Playgroud)
在日志文件中注意我的NameNode is at IP 10.0.3.112,DataNode failing is at 10.0.3.114在这种情况下.所有节点FQDN都在所有节点上的hosts文件中定义,我可以ping所有节点上的每个节点.
这里让我感到困惑的是,DataNode正试图找到10.0.3.233列表中不是IP的NameNode,也不知道NameNode 的IP么?这个设置在哪里?失败的第二个DataNode是,10.0.3.113并且还查找10.0.3.158它无法解析的不同IP(),因为它未定义且在我的设置中不存在.
工作的节点10.0.3.112就像NameNode一样,但在日志中我看到它正在使用src /和dst /文件,这些IP是我使用的范围之外的IP.像这样:
src: /10.0.3.112:50010, dest: /10.0.3.180:53246, bytes: 60, op: HDFS_READ,
cliID: DFSClient_NONMAPREDUCE_-939581249_2253, offset: 0, srvID: a83af9ba-4e1a-47b3-a5d4-
f437ef60c287, blockid: BP-232943349-10.0.3.112-1417116665984:blk_1073742468_1644,
duration: 1685666
Run Code Online (Sandbox Code Playgroud)
那么到底发生了什么,以及当我的所有节点看到并解决彼此时,我怎么也无法到达NameNode?
感谢帮助
PS:/ etc/hosts文件如下所示:
127.0.0.1 …Run Code Online (Sandbox Code Playgroud) 我docker-openvpn在我的(本地)Kubernetes集群中旋转了一个容器,以便安全地访问我的服务并在本地调试相关服务.
我可以通过openVPN服务器连接到集群.但是我无法通过DNS解析我的服务.
我设法在VPN服务器上设置路由后达到了这一点:
subnet 10.2.0.0/16subnet 10.3.0.0/1610.3.0.10curl到服务 的IP,并得到我所需要的数据.但是当我nslookup kubernetes或任何服务,我得到:
nslookup kubernetes
;; Got recursion not available from 10.3.0.10, trying next server
;; Got SERVFAIL reply from 10.3.0.10, trying next server
Run Code Online (Sandbox Code Playgroud)
我仍然缺少从DNS服务器返回的数据,但无法确定我需要做什么.
如何SERVFAIL在Kubernetes DNS中调试此问题?
编辑:
我注意到并希望了解的事情:
nslookup 用于解析除openvpn Pod之外的任何窗格中的服务名称nslookup在其他Pod中工作, …我试图将json对象解析为结构,但设置为0的整数值将不起作用.
q := []byte(`{"string":"this is a string", "integer": 0}`)
type Test struct {
String string `json:"string,omitempty"`
Integer int `json:"integer,omitempty"`
}
var qq Test
if err := json.Unmarshal(q, &qq); err != nil {
panic(err)
}
queryStr, err := json.Marshal(qq)
if err != nil {
panic(err)
}
fmt.Println(string(queryStr))
// Output: {"string": "this is a string"}
Run Code Online (Sandbox Code Playgroud)
如果我将整数设置为0以外的任何值,这可以正常工作.
即使我解组对象并将Integer字段设置为0,将其编组回去也会删除"整数"字段.
为什么?以及如何解决这个问题?
编辑:
从我从评论中收集的内容,omitempty当值为0时触发.所以现在消失是有道理的.
我正在解析json,编辑它并将其转发到另一个服务,所以这是不幸的,特别是因为字段不存在默认为0以外的其他值,我宁愿不必为下游API提供默认值.
那么有没有办法省略空值但是保持0?
或者换成其他的东西?
我需要有2个结构:一个用于输入,一个用于输出?
Kubernetes Secrets创建作为volumeMount挂载的文件.
可以将多个文件放在一个Secret中.
有没有办法创建一个将文件放在目录结构(即文件夹)中的秘密?
文档中没有任何迹象,并且/密钥名称中不允许使用,因此似乎不可能(除了制作多个秘密并将它们安装在不同的卷中)
有谁知道更好吗?