给定一个二进制文件,使用Go编译GOOS=linux并基于此GOARCH=amd64部署到docker容器alpine:3.3,如果docker引擎主机是Ubuntu(15.10),二进制文件将不会运行:
sh: /bin/artisan: not found
Run Code Online (Sandbox Code Playgroud)
如果在Mac OS X上的VirtualBox VM中部署了docker引擎主机(它是基础),那么相同的二进制文件(针对相同的OS和arch编译)将运行得很好.busyboxalpine
如果容器基于Ubuntu映像之一,那么同样的二进制文件也将完美运行.
知道这个二进制文件丢失了吗?
这是我为重现而做的(在OS X上的VirtualBox/busybox中成功运行未显示):
构建(即使拱匹配,也使用标记显式构建):
? artisan git:(master) ? GOOS=linux GOARCH=amd64 go build
Run Code Online (Sandbox Code Playgroud)
检查它是否可以在主机上运行:
? artisan git:(master) ? ./artisan
10:14:04.925 [ERROR] artisan: need a command, one of server, provision or build
Run Code Online (Sandbox Code Playgroud)
复制到docker目录,构建,运行:
? artisan git:(master) ? cp artisan docker/build/bin/
? artisan git:(master) ? cd docker
? docker git:(master) ? cat Dockerfile
FROM docker:1.10
COPY build/ /
? docker git:(master) …Run Code Online (Sandbox Code Playgroud) 我们的内部网络具有为内部用途保留的范围172.20.0.0/16,并且docker默认使用172范围用于其内部网络.我可以通过为bip守护进程提供设置来重置桥接器以生存在192.168中:
? ~ sudo cat /etc/docker/daemon.json
{
"bip": "192.168.2.1/24"
}
? ~ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.2.1 netmask 255.255.255.0 broadcast 0.0.0.0
Run Code Online (Sandbox Code Playgroud)
但是,当通过创建新的自定义网络docker network create或通过在这些networks部分中定义它们docker-compose.yaml仍在172中创建时,最终会与172.20以下内容发生冲突:
? ~ docker network create foo
610fd0b7ccde621f87d40f8bcbed1699b22788b70a75223264bb14f7e63f5a87
? ~ docker network inspect foo | grep Subnet
"Subnet": "172.17.0.0/16",
? ~ docker network create foo1
d897eab31b2c558517df7fb096fab4af9a4282c286fc9b6bb022be7382d8b4e7
? ~ docker network inspect foo1 | grep Subnet
"Subnet": "172.18.0.0/16",
Run Code Online (Sandbox Code Playgroud)
我知道我可以提供子网值docker network create,但我宁愿想要创建所有这些子网192.168.*.
如何配置 …
将activemq-web-console战争部署到Tomcat嵌入式应用程序后,如何使它连接到现有代理而不是创建新代理?
战争附带了一组预定义的配置,尤其是其中WEB-INF/activemq.xml包含了BrokerService
<broker brokerName="web-console" useJmx="true" xmlns="http://activemq.apache.org/schema/core">
<persistenceAdapter><kahaDB directory="target/kahadb"/></persistenceAdapter>
<transportConnectors>
<transportConnector uri="tcp://localhost:12345"/>
</transportConnectors>
</broker>
Run Code Online (Sandbox Code Playgroud)
从用于webconsole-embedded.xml以下列方式:
<bean id="brokerService" class="org.apache.activemq.xbean.BrokerFactoryBean">
<property name="config" value="/WEB-INF/activemq.xml"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
此配置创建的新实例BrokerService并尝试启动代理。
据报道,Web控制台可用于监视现有的代理服务,而不是创建新的代理服务。为此,应在某处设置以下属性:
webconsole.type=properties
webconsole.jms.url=tcp://localhost:61616
webconsole.jmx.url=service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-trun
Run Code Online (Sandbox Code Playgroud)
问题是,在哪里必须在Tomcat嵌入式应用程序中设置这些属性,并且必须对上述XML进行哪些更改才能使用它们。我找不到任何明智的解释如何配置它,而BrokerService其余的spring配置似乎需要一个实例。
有任何想法吗?
请不要建议使用hawtio,而不是!
使用curlppC ++包装器,libcurl如何为发布请求指定JSON有效负载,以及如何在响应中接收JSON有效负载?我从这里去哪里:
std::string json("{}");
std::list<std::string> header;
header.push_back("Content-Type: application/json");
cURLpp::Easy r;
r.setOpt(new curlpp::options::Url(url));
r.setOpt(new curlpp::options::HttpHeader(header));
// set payload from json?
r.perform();
Run Code Online (Sandbox Code Playgroud)
然后,如何等待(JSON)响应并检索正文?
给定Go中的(部分)填充的缓冲通道
ch := make(chan *MassiveStruct, n)
for i := 0; i < n; i++ {
ch <- NewMassiveStruct()
}
Run Code Online (Sandbox Code Playgroud)
是否建议在关闭通道(由作者)时也将其排干,以防读者何时从中读取该通道(例如,通道数量有限并且他们目前很忙)?那是
close(ch)
for range ch {}
Run Code Online (Sandbox Code Playgroud)
如果通道上还有其他并发读取器,是否可以保证这样的循环结束?
上下文:具有固定数量的工作程序的队列服务,当服务关闭时(但不一定在紧接之后才进行GC),该服务应删除对排队的任何内容的处理。因此,我要结束时向工作人员表示服务已终止。我可以立即耗尽剩余的“队列”,从而让GC释放分配的资源,我可以读取并忽略工作进程中的值,并且可以将通道保留为正在运行的读取器,并在写入器中将通道设置为nil,以便GC会清理所有内容。我不确定哪种方法最干净。