两个容器与Java之间的Docker通信

我没有在任何post上find我的答案。

我在容器上使用PHP下的项目容器,工作正常。 我想链接在另一个容器上启动的Java。

我使用“java:8”图像configuration像这样:

engine: build: ./docker/engine/ volumes: - ".:/home/docker:rw" - "./docker/engine/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro" links: - "db:db" - "java:java" working_dir: "/home/docker" java: image: java:8 tty: true ports: - "999:999" 

在我的dockerPHP容器(调用“引擎”),我有这个环境variables。

 JAVA_1_ENV_CA_CERTIFICATES_JAVA_VERSION=20140324 JAVA_1_ENV_JAVA_DEBIAN_VERSION=8u72-b15-1~bpo8+1 JAVA_1_ENV_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 JAVA_1_ENV_JAVA_VERSION=8u72 JAVA_1_ENV_LANG=C.UTF-8 JAVA_1_NAME=/recetteetudiant_engine_1/java_1 JAVA_1_PORT=tcp://172.17.0.3:999 JAVA_1_PORT_999_TCP=tcp://172.17.0.3:999 JAVA_1_PORT_999_TCP_ADDR=172.17.0.3 JAVA_1_PORT_999_TCP_PORT=999 JAVA_1_PORT_999_TCP_PROTO=tcp JAVA_ENV_CA_CERTIFICATES_JAVA_VERSION=20140324 JAVA_ENV_JAVA_DEBIAN_VERSION=8u72-b15-1~bpo8+1 JAVA_ENV_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 JAVA_ENV_JAVA_VERSION=8u72 JAVA_ENV_LANG=C.UTF-8 JAVA_NAME=/recetteetudiant_engine_1/java JAVA_PORT=tcp://172.17.0.3:999 JAVA_PORT_999_TCP=tcp://172.17.0.3:999 JAVA_PORT_999_TCP_ADDR=172.17.0.3 JAVA_PORT_999_TCP_PORT=999 JAVA_PORT_999_TCP_PROTO=tcp RECETTEETUDIANT_JAVA_1_ENV_CA_CERTIFICATES_JAVA_VERSION=20140324 RECETTEETUDIANT_JAVA_1_ENV_JAVA_DEBIAN_VERSION=8u72-b15-1~bpo8+1 RECETTEETUDIANT_JAVA_1_ENV_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 RECETTEETUDIANT_JAVA_1_ENV_JAVA_VERSION=8u72 RECETTEETUDIANT_JAVA_1_ENV_LANG=C.UTF-8 RECETTEETUDIANT_JAVA_1_NAME=/recetteetudiant_engine_1/recetteetudiant_java_1 RECETTEETUDIANT_JAVA_1_PORT=tcp://172.17.0.3:999 RECETTEETUDIANT_JAVA_1_PORT_999_TCP=tcp://172.17.0.3:999 RECETTEETUDIANT_JAVA_1_PORT_999_TCP_ADDR=172.17.0.3 RECETTEETUDIANT_JAVA_1_PORT_999_TCP_PORT=999 RECETTEETUDIANT_JAVA_1_PORT_999_TCP_PROTO=tcp 

Ping命令正常工作。 但是,我怎样才能用java呢? 我尝试使用该命令

 root@639144f7c95f:/home/docker# echo $JAVA_1_PORT$RECETTEETUDIANT_JAVA_1_ENV_JAVA_HOME tcp://172.17.0.3:999/usr/lib/jvm/java-8-openjdk-amd64 root@639144f7c95f:/home/docker# /recetteetudiant_engine_1/java_1 bash: /recetteetudiant_engine_1/java_1: No such file or directory root@639144f7c95f:/home/docker# $JAVA_1_PORT$RECETTEETUDIANT_JAVA_1_ENV_JAVA_HOME bash: tcp://172.17.0.3:999/usr/lib/jvm/java-8-openjdk-amd64: No such file or directory root@639144f7c95f:/home/docker# 

也许我必须分享一个音量? 我可以通过TCP协议使用Java吗?

您的撰写文件中有2个容器。 似乎主持一个PHP应用程序和一个已安装的Java。

从容器的“内部”来看,它的行为就好像你有两台不同的机器(它们不是机器,而是容器):一台主机名为“引擎”的机器和一台主机名为“java”的机器。

你以某种方式连接到称为“引擎”的“机器”,并在那里运行java。 Java应用程序安装在另一台“机器”上。

你试图做的似乎没有道理。

你不能(或者至less不应该)在TCP上使用java – 而不是以你想要的方式,这似乎是以某种方式调用基本上在另一台机器上的java可执行文件(在这种情况下是docker container)。 也许有一些方法可以通过一些远程调用来实现,但即使可能,这仍然是错误的。 只需将JRE添加到您的PHP容器。 或者让你的jar像WS一样工作。 Docker容器不能用于container1有java可执行文件的方式,所以从那里调用它,container2有vi,container3,grep等等。

一些容器之间的“交互”方式(使用一个通用容积):

  1. 在主持人协调。

    docker执行-t php命令准备

    docker exec -t java-app-jdk java -jar yuicompressor.jar bla-bla

    docker执行-t php命令

  2. 创build简单的应用程序监听端口,并启动JavaContainer命令(恕我直言最好的方式)

  3. 例如,在JavaContainer中创build看“卷”的“cron”

    a)phpContainer将文件放入音量并放入“指示器”文件

    b)javaContainer查看“指标”文件,并开始工作。 发布完成删除“指标”文件,并把“工作日志”文件。

    c)phpContainer等待一段时间,并获得“工作日志”文件。 取决于结果parsing“工作日志”文件。

UPD。 你也可以做类似于docker.spotter https://github.com/discordianfish/docker-spotter的东西。