我有一个使用vert.x的maven项目。我在一个Main类中部署所有verticals,如下所示:
package launcher;
import io.vertx.core.Vertx;
public class MainLauncher {
public static void main(String[] args) {
final Vertx vertx = Vertx.vertx();
vertx.deployVerticle(new ImportFileVerticle());
vertx.deployVerticle(new InsertFileVerticle());
vertx.deployVerticle(new ExportFileVerticle());
}
}
我添加了这样的Dockerfile:
FROM maven:3.3.9-jdk-8
RUN mkdir -p /opt/app
WORKDIR /opt/app
COPY pom.xml /opt/app/pom.xml
RUN mvn install
COPY . /opt/app/
RUN mvn package
EXPOSE 8080
CMD ["mvn", "exec:java"]
我在pom.xml中添加了这个依赖项:
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
</dependency>
我用这个命令构建图像:
docker build-t myapp。
我使用以下命令运行:
docker运行-p 8080:8080-t-i myapp
一旦运行完成,我键入的问题:
http://localhost:8080/
什么都没发生。
或者通过使用poster调用我的vertical的url(localhost:8081/listImport(来查看我的导入列表,不会发生任何事情。
注意:8081上的ImportFileVerticle侦听8082,ExportFileVerticle侦听8083
一旦docker映像启动,我如何调用这些垂直中定义的URL?
我的第二个问题是,我有一个包含应用程序前端的docker映像,我如何将包含前端的映像与包含后端的映像以及包含mysql的映像进行通信?
提前感谢您对的帮助
关于我们如何运行docker容器的一点信息:
我们在创建图像时所做的是创建一个包含所有依赖项的影子jar,然后在docker图像中使用该可执行jar。为此,我们使用io.vertx.core.Launcher
作为我们的主类,然后我们创建一个初始化垂直线来提取我们的配置和机密,然后生成我们需要通过vertx.deployVerticle(CLASS);
运行的所有其他垂直线
或者,如果你不想做所有这些工作,你可以使用Vert-Docker
现在回答您的问题:
-
-p 8080:8080
docker run命令的这一部分声明您正在将8080主机端口绑定到docker容器中的8080。您在上面声明,您正在8081、8082、8083端口上的容器中运行垂直端口。如果要从主机访问它们,必须将端口绑定到主机。 -
有两种方法:
- 通过
-p
端口映射将容器端口绑定到主机,并设置其他容器连接到主机ip地址和指定端口。请注意,您不能使用localhost,因为localhost指的是容器localhost而不是主机 - 容器链接。您也可以使用
--link
创建一个虚拟网络,然后以这种方式链接容器,这将在容器/etc/hosts文件中创建dns条目,然后将其放入您的服务配置中。在这种情况下,如果我在同一台机器上使用depends_on
子句指定依赖容器,我通常会使用docker compose。docker撰写依赖项
- 通过
希望这能有所帮助!