我在任何帖子上都找不到答案。
我在容器上使用带有PHP项目的容器,该容器工作正常。我想链接在另一个容器上启动的Java。
我使用" java:8"图像配置如下:
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"
在我的docker PHP容器上(call" engine"),我有这个环境变量。
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吗?
答案 0 :(得分:0)
您的撰写文件中有2个容器。似乎主持一个php应用程序和一个安装了java的应用程序。
来自"内部"容器,它表现得好像你有两台不同的机器(它们不是机器,而是容器):一台机器"使用名为" engine"的主机名和一台机器"使用名为" java"的主机名。
你以某种方式连接到"机器"叫"引擎"并在那里运行java。 Java应用程序安装在另一台" machine"。
上你想要做的事似乎没有意义。
答案 1 :(得分:0)
你不能(或者至少不应该)使用java over TCP - 而不是你想要的方式,这似乎是以某种方式调用java可执行文件,它基本上是在另一台机器上(或者是docker容器)在这种情况下)。也许有一些方法可以通过一些远程调用实现这一点,但即使可能,它仍然是错误的。只需将JRE添加到您的php容器中即可。或者让你的jar像WS一样工作。 Docker容器不应该以container1具有java可执行文件的方式使用,因此从那里调用它,container2有vi,container3 grep等......
答案 2 :(得分:0)
容器之间“交互”的一些方式(具有一个共同的卷):
在主持人中协调。
docker exec -t php command-prepare
docker exec -t java-app-jdk java -jar yuicompressor.jar bla-bla
docker exec -t php command-post
创建在JavaContainer中监听端口和启动命令的简单应用程序(恕我直言最佳方式)
创建在JavaContainer中查看卷的“cron”,例如,
a)phpContainer将文件放入卷并放入“指标”文件
b)javaContainer看看“指标”文件,并开始工作。发布完整删除“指标”文件并输入“工作日志”文件。 c)phpContainer等待一段时间,并获得“工作日志”文件。根据结果解析“工作日志”文件。UPD。 您也可以执行类似于docker.spotter https://github.com/discordianfish/docker-spotter的操作。