Tag: Java

使用Firebase侦听器的后端Java应用程序的多个实例的问题

我正在运行在docker中的后端Java应用程序(使用Spring)中工作。 此应用程序有一个Firebase实时监听器。 在本地它是完美的! 但是,当我在Docker中部署它并创build2个实例(容器)时,当我在Firebase RTDB中进行更改(它应该只执行一次)时,它开始运行相同的逻辑2次。 这是我在Bean中创build侦听器的代码: FirebaseOptions options; options = new FirebaseOptions.Builder() .setServiceAccount(new FileInputStream(resourceDir + File.separator +"test1.json")) .setDatabaseUrl("https://test1.firebaseio.com/").build(); FirebaseApp.initializeApp(options); final FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference listenerRef; DatabaseReference commerceRef; commerceRef.orderByChild("got").equalTo(0).addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) { LOGGER.info("data changed:" + dataSnapshot.getKey()); LOGGER.info("data ref:" + dataSnapshot.getRef()); ……logic …. } catch (Exception e) { LOGGER.info("Error […]

无法从docker容器连接到我的主机上运行的mySql

我已经部署了一个docker容器,它具有从openjdk7基础镜像构build的简单Java-JDBC代码。 现在我有我的本地机器上的端口3306上运行mysql现在我怎样才能连接到运行在主机上的docker容器的mysql? 我已经部署容器使用: docker run -it -p 25000:27000 -p 3307:3306 94e56cffbdf7 bash 但在容器中,当我尝试运行javaCode时,出现如下错误: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败 成功发送到服务器的最后一个数据包是0毫秒前。 驱动程序尚未收到来自服务器的任何数据包。 如果我尝试使用以下命令连接到mysql: mysql -h 10.10.35.129 -p 3307 -u root -p 10.01.35.129是我的主机的ip。 我收到错误: bash:mysql:找不到命令 为了引用,我也附加了我试图在Docker容器中运行的Java代码: package jdbcCodes; import java.sql.*; public class MySqlJDBC { public static void main(String[] args) { try{ Class.forName("com.mysql.jdbc.Driver"); // here testEmp is DB name and root is user […]

在使用Java客户端启动Docker容器时拒绝连接

我是docker新手,我想用java客户端启动docker容器, 我尝试https://github.com/docker-java/docker-java如下 package containers.launch_containers; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.core.DockerClientBuilder; public class StartContainers{ DockerClient dockerClient; public StartContainers() { startContainers(); } public void startContainers() { try { dockerClient = DockerClientBuilder.getInstance("tcp://127.0.0.1:2375").build(); //starting the container of hello-world dockerClient.startContainerCmd("hello-world").exec(); }catch(Exception ex) { ex.printStackTrace(); } } public static void main(String args[]) { StartContainers startContainers=new StartContainers(); } } 在bashrc中设置所需的configuration 导出DOCKER_HOST = tcp://127.0.0.1:2375 export […]

Docker容器中的Java RMI服务器

在一台服务器上,我正在使用RMI-server jar文件运行我的docker容器。 我已经尝试了几种不同的configuration,但我不能得到它的工作。 我的服务器: public class Main extends UnicastRemoteObject implements RmiServerIntf { public static final String MESSAGE = "Hello World from docker in RMI"; public Main() throws RemoteException { super(0); // required to avoid the 'rmic' step, see below } public String getMessage() { return MESSAGE; } public static void main(String args[]) throws Exception { […]

在LXC容器中运行应用程序的服务器上运行应用程序所需的资源?

LXC / LXD提供了像openVZ这样的虚拟机,但是消除了在GUEST系统上安装定制内核的开销。 在GUEST操作系统上,在LXC容器中运行像JETTY / TOMCAT这样的应用程序服务器的开销是多less,VS直接在GUEST操作系统上运行同一个应用程序服务器? 第一个我注意到的是容器本身的大小,安装tomcat服务器大约300MB, tomcat服务器本身只有10MB。 最初的调查结果也不全面 https://superuser.com/questions/871724/whats-the-minimum-overhead-of-a-linux-container/895490 什么是Docker容器的运行时性能成本 (这是与docker的比较)

Docker-client:如何在运行时将用户input附加到attachStdin

我正在执行一个Java程序,在执行过程中需要用户input。 下面是我用来执行我的命令的docker-client的方法。 final String execCreation = docker.execCreate( id, command, DockerClient.ExecCreateParam.attachStdin(), DockerClient.ExecCreateParam.attachStdout(), DockerClient.ExecCreateParam.attachStderr() ); final LogStream output = docker.execStart(execCreation); 而command = ["bash", "-c", "cd mydockerbuild/ && javac Program.java && java -cp . Program exit"] 我没有得到错误,但代码退出exitcode == null 。 请指教!

docker集装箱运行时应用configuration

我们有一个Java应用程序。 它连接到oracle数据库。 当我们将应用程序部署到客户站点时,它有三个属性文件和客户更改这些属性文件的值。 我们有另一个python脚本,允许客户修改这些属性文件,并在configuration完成后启动主应用程序。 现在我们想要集成我们的Java应用程序,并希望使用群模式。 唯一的问题是在我启动容器之前find客户编辑这些属性文件的简单方法。 任何想法docker工作大师? 非常感谢帮助。

在Docker环境中,Spring ResourceUtils或DefaultResourceLoader无法获取类path资源

我正在开发一个spring-boot web应用程序,我需要获取一些classpath资源,所以我使用下面的方法: @Autowired private Enviroment env; String fileLocation = ResourceUtils.getFile(env.getProperty("common.cert-location")).getAbsolutePath(); 要么 String fileLocation = new DefaultResourceLoader().getResource("filename").getFile().getPath(); 他们两个在本地环境中正常运行,但是当我打包应用程序并在Docker镜像中运行它时,它会抛出exception。 我如何获得资源? 谢谢!

用JSch运行docker命令

我使用JSch来运行一个docker命令,但是它不起作用,它不会返回任何东西。 ChannelExec channel = (ChannelExec) session.openChannel("exec"); BufferedReader in = new BufferedReader(new InputStreamReader(channel.getInputStream())); channel.setCommand("docker ps -a"); channel.connect(); String msg = null; while ((msg = in.readLine()) != null) { System.out.println(msg); } 如果我运行一个bash命令为'pwd'或者'ls -l'可以。 我可以期望docker命令将工作在ChannelExec而不是ChannelShell或任何其他types? session.openChannel("exec") 问候。

Glassfish 3.1.2.2映像的Docker群集无法启动节点

我们想要dockerize在Glassfish 3.1.2.2上运行的应用程序,并使用docker swarm来运行它的一些负载平衡节点。 为此,我创build了一个基于DockerFile的Docker镜像: FROM openjdk:7-jdk ENV LANGUAGE=el_GR:el \ lang=EL_gr.utf-8 \ JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 \ GLASSFISH_HOME=/usr/local/glassfish3/glassfish ENV GLASSFISH_DOMAIN1=$GLASSFISH_HOME/domains/domain1 \ GLASSFISH_BINARY_URL=http://download.oracle.com/glassfish/3.1.2.2/release/glassfish-3.1.2.2.zip \ PATH=$PATH:$JAVA_HOME/bin:$GLASSFISH_HOME/bin LABEL glassfish.version="3.1.2.2" \ java="openjdk-7" RUN apt-get update && apt-get install -y curl unzip zip inotify-tools locales && \ #localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias el_GR.UTF-8 ENV LANG el_GR.utf8 && \ rm -rf /var/lib/apt/lists/* […]