小编Ole*_*yar的帖子

Go编译的二进制文件不会在Ubuntu主机上的alpine docker容器中运行

给定一个二进制文件,使用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)

go busybox docker alpine-linux

54
推荐指数
4
解决办法
2万
查看次数

更改docker自定义网络的默认子网

我们的内部网络具有为内部用途保留的范围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.*.

如何配置 …

docker docker-compose

6
推荐指数
1
解决办法
2283
查看次数

将ActiveMQ Web控制台连接到现有代理(而不是启动新代理)

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,而不是!

spring activemq-classic

6
推荐指数
1
解决办法
406
查看次数

使用curlpp发布和接收JSON负载

使用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)响应并检索正文?

c++ json http-post curlpp

4
推荐指数
1
解决办法
3146
查看次数

当关闭缓冲通道时,是否应该排空缓冲通道

给定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会清理所有内容。我不确定哪种方法最干净。

channel go

3
推荐指数
2
解决办法
5604
查看次数