- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个连接到 mariadb 数据库的小型网络应用程序。我在一个容器中运行 Tomcat,在另一个容器中运行 mariadb。 Tomcat引用Context.xml文件中指定JDBC url的mariadb实例,指定当前fqhn和端口3306。
我现在必须复制这个配置,这样我就有两个 webapp 实例,包括四个容器,两个运行 Tomcat,两个运行 Mariadb。在“docker run”上进行简单的端口映射非常容易,因此每个 Tomcat 实例都可以通过不同的端口访问,对于 mariadb 实例也是如此。
我不清楚的是如何将 Tomcat 容器中的 OUTGOING host:port 引用映射到 mariadb 实例。图像中的 Context.xml 文件使用当前的完全限定主机名和默认端口 3306 指定数据库的 JDBC url。
我可以更改单个图像,以便它可以与两个实例一起使用,但我仍然需要一个具有单个 JDBC url 的图像。对于第一个容器对,它必须到达在 3306 上运行的原始 mariadb 实例。第二个容器对,即使它指定了端口 3306,也必须连接到端口 3307。
这是通过“--link”命令行选项以某种方式完成的吗?
更新:
如果现有的应用程序没有运行,这会更容易,我可以破解它直到它工作。我必须确保我小心翼翼地完成这一步,以尽量减少干扰。我必须对图像源代码进行一项更改,即 context.xml 文件中的 JDBC url。我将其更改为“jdbc:mysql://db:3306/estimatordb
”。
虽然我在我的桌面上(或在 Jenkins 实例上)使用 Gradle 构建应用程序 WAR 文件,但 Docker 镜像仅在 Jenkins 实例上构建。我一直在 systemd 文件中的目标主机上运行容器,只是执行“docker run ...”。在 Jenkins 构建中,我通过 ssh 执行图像名称的“docker pull”,然后执行“docker stop”以停止现有容器,以便它使用新图像重新启动。
在此期间,我将更改我构建的镜像名称(只需在名称中添加“2”),并且我现在正在注释掉“ssh docker stop”。我不确定用 compose 会转化成什么。显然,“docker-compose stop”是一个起点,但如果我在此构建中更改撰写文件,这会让人感到困惑。
我的“docker-compose.yml”文件是我项目中的一个源文件,所以我想我会做一个“ssh docker-compose -f -”,管道在我的撰写文件中。
以下是我为“docker-compose.yml”文件拼凑的内容,但我根本没有验证过:
version: '2'
services:
estimator:
image: tomcat-estimator2
ports:
- "8889:8080"
- "445:443"
volumes:
- /etc/localtime:/etc/localtime
depends_on:
- db
links:
- db:db
db:
image: mariadb:10.1.22
ports:
- "3307:3306"
volumes:
- /etc/localtime:/etc/localtime
- /opt/app/estimator/databases/estimator/mysql:/var/lib/mysql
estimator-automation:
image: tomcat-estimator2
ports:
- "8890:8080"
- "446:443"
volumes:
- /etc/localtime:/etc/localtime
depends_on:
- db-automation
links:
- db-automation:db
db-automation:
image: mariadb:10.1.22
ports:
- "3308:3306"
volumes:
- /etc/localtime:/etc/localtime
- /opt/app/estimator/databases/estimator-automation/mysql:/var/lib/mysql
请注意,端口号是现有应用程序端口的 1+,因为在我确定它可以工作之前我不想将其关闭。
对此的任何评论都会有用。
最佳答案
一般而言,通常通过提供一种传递命令行参数或环境等信息的方式来处理指定运行应用程序所需资源等用例(尤其是在 docker 上下文中)。有关这方面的更多信息,请查看 the great manifesto of the 12 factor app , 特别是 the section on configuration .
对于您的具体问题,我确信有一些方法可以将此信息注入(inject)到 tomcat 配置中,例如 this question .因此,您已经可以通过在不同端口上运行两个数据库容器并将相应的连接字符串传递给您的两个 tomcat 容器来解决您的问题。
但这还不是完整的解决方案。当您考虑将 tomcat 容器与数据库组合为一个部署时,您可以利用 docker 虚拟网络并连接这样的设置,甚至无需向外界发布数据库的端口。当两个容器在同一个网络中时,您可以使用它们的给定名称来引用它们,这样您的数据库在 docker 虚拟网络中始终可以作为 mydatabase:3306
访问。当使用像 docker-compose 这样的系统为您处理此类命名空间并允许您将整个堆栈定义为一个 compose 文件时,这尤其容易。请看the getting started for docker-compose
这正是通过访问 Redis 实例的 Python 应用程序实现的。
关于tomcat - 如何将传出主机/端口从容器映射到不同的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45925985/
我想创建一个 Mercurial Hook ,当我推送到本地存储库时,它会推送到备份远程存储库。我以为我可以钩住“传出”钩子(Hook),但这会创建一个不漂亮的无限循环。那么是否有类似推送后的 Hoo
我有一个托管在 Tomcat 上的应用程序,它需要通过 IBM DataPower 设备对托管的服务进行 HTTPS 调用。我在日志中看到以下内容: http-bio-8080-exec-1, REA
是否有一个 hg 命令可以组合 hg传入 + hg传出 + hg status? 这会告诉您是否有任何远程内容需要传入,是否有任何本地提交的内容需要出去,或者是否有任何本地更改需要提交。 最佳答案 虽
我在 Azure 中有一个 Windows VM,用于 VS2015 实验。 Google 云端硬盘无法联系更新服务器来完成其自身的安装(尽管 Chrome/Omaha 工作正常)。 显然,我也无法通
我正在使用 QuickFIX/J (1.6.4)。我可以看到所有消息都非常正确地隔离(传入/传出/事件) , event> (Session FIX.4.2:CLIENT2/SUB-> sched
我在 Azure 中有一个 Windows VM,用于 VS2015 实验。 Google 云端硬盘无法联系更新服务器来完成其自身的安装(尽管 Chrome/Omaha 工作正常)。 显然,我也无法通
我正在使用 QuickFIX/J (1.6.4)。我可以看到所有消息都非常正确地隔离(传入/传出/事件) , event> (Session FIX.4.2:CLIENT2/SUB-> sched
我正在使用 docker-compose 运行我的应用程序。该应用程序包含许多容器。一个容器有一个 node.js 应用程序,另一个容器有一个 .net 核心应用程序。当尝试从任何容器向外部服务器发送
我想将文件从 HDFS 传输到不在 hadoop 集群中但在网络中的不同服务器的本地文件系统。 我本可以做到: hadoop fs -copyToLocal and then scp/ftp .
我遇到了一个奇怪的偶然事件,我的结果 lsof | grep 40006 制作 java 29722 appsrv 54u IPv6 71135755
我错误地 checkin 了一些更改。现在更改正在传出更改中,但我不希望它们交付。我怎样才能让它们回到 Unresolved 状态?如果我丢弃它们,它们就会从我的源代码中消失,我就会失去我的工作。 最
我在将 URL 参数添加到每个生成的 URL 或重定向到 ASP MVC 4 应用程序时遇到问题。 我想生成一个 ID,并在整个应用程序的任何时候使用这个 ID。在 session 中存储 id 不是
我正在开发一个 Java/Spring Web 应用程序,它对每个传入请求执行以下操作: 向第三方网络服务器发出大量请求, 检索每个人的响应, 将每个响应解析为 JSON 对象列表, 将 JSON 对
我有一个基本的“包装器”WinForms 应用程序,它有一些基本控件和一个 WebBrowser 控件 (System.Windows.Forms.WebBrowser)。这链接到一个网络服务,它完成
这个问题在这里已经有了答案: Can I send webrequest from specified ip address with .NET Framework? (3 个答案) 关闭 8 年前
我在这项研究中对交通路口进行研究,我试图找到有影响力的节点,也就是说......哪些路口会相互影响,我试图将我的网络表示为图形网络,所以我搜索了已经使用的算法在希望将同样的方法应用于我的问题的网络中,
我正在开发 OpenCL 1.2 处理大型图像的应用程序。 目前,我正在测试的图像是 16507x21244 像素。我的 内核在一个循环中运行,该循环对图像的 block 进行操作.内核将 32bpp
我知道有关断开链接的问题一直被问到,但我的问题似乎有点不同,而且没有一个解决方案有效。 现在,点击我的导航部分中的其他网站链接时,它们都不起作用。它记录它们在那里,如果您右键单击它并选择“在新选项卡中
我正在使用 node.js 构建数据传输代理服务器。它使用 http(s) REST API 将客户端请求通过管道传输到快速对象存储服务器。 It works fine for the individ
我有一个 Azure Servicebus 函数触发器,每当事件放入其指定队列时,该触发器就会调用外部端点。但是,当函数拾取事件并准备发出传出请求时,它会失败并显示以下日志消息 Executed 'A
我是一名优秀的程序员,十分优秀!