大家:
我在 AWS 的 ec2 实例中发布了 bitnami jenkins。在同一台机器上,我正在启动我的管道,其中我将 docker 用于多个进程,其中一个进程为 a.war 应用程序启动一个数据库和一个 tomcat。事实上,我希望能够从子域或另一个域访问它(我在该 docker 容器中启动的应用程序,以便能够观察到更改)。
为此,我正在使用 traefik,我可以看到在同一个 EC2 网络中运行的所有容器。我也可以将它重定向到某个 url。我不知道的是如何创建一个新的子域来完成这项工作。 Traefic 使用以下命令启动它(因此您可以看到我如何映射端口):
sudo docker run -d -p 9090:8080 -p 8888:80 --network public --name traefik -v $PWD/traefik.toml:/etc/traefik/traefik.toml -v/var/run/docker.sock:/var/run/docker.sock traefik
在下图中,我向 traefik 展示了我想暴露给外部的 ip 和路径(在本例中,它是带有扩展名的域,但我也尝试了子域):
traefic配置文件在pastebin中如下:link to configuration file in pastebin
据我所知,bitnami 应用程序使用 tomcat,如果不是请纠正我。我在 freenom 中有域,因为这是我正在进行的测试。
创建子域和扩展名是值得的:http:/midominio.ga/test
非常感谢,欢迎任何帮助。
编辑 1:我知道我可以通过将容器端口映射到运行 jenkins 的免费 EC2 端口来公开它,但我更喜欢在子域中创建它,或者理想情况下在原始域的扩展中动态创建它。
编辑 2:
我会尝试更好地解释我的情况。我有一个运行 bitnami jenkins 的 EC2 实例。在我的管道中,我有以下内容:
stage ('Postgres: despliegue inicial de la base de datos') {
def dbImage = docker.build("catalogador/catalogador-tfg-db:${BRANCH_NAME}","--label jenkins ./database")
dbHostname = "${BRANCH_NAME}-${BUILD_NUMBER}-db"
db = dbImage.run("-p 5432:5432 --network public --name ${dbHostname}")
timeout(time: 3, unit: 'MINUTES') {
sh "until [ \$(docker logs ${dbHostname} --tail 50 2>&1 | grep 'init process complete' | wc -l) -gt 0 ]; do sleep 10; done"
}
}
stage ('Tomcat: despliegue de la aplicación') {
def webImage = docker.build("asd/asd-tfg-app:${BRANCH_NAME}","--label jenkins ./appserver")
def webJavaOpts = "-Dspring.datasource.url=jdbc:postgresql://${dbHostname}:5432/${dbName} " +
"-Dspring.datasource.username=${dbUser} " +
"-Dspring.datasource.password=${dbPassword} "
webHostname = "${BRANCH_NAME}-${BUILD_NUMBER}-app"
def proxyOpts = "-l 'traefik.frontend.rule=Host:${testingDomainName};PathPrefixStrip:/${webProxyPrefixPath}' " +
"-l 'traefik.port=9090'"
web = webImage.run("-p 9999:8080 -p 9898:80 --network public --link ${dbHostname} --name ${webHostname} -e JAVA_OPTS='${webJavaOpts}' ${proxyOpts}")
timeout(time: 3, unit: 'MINUTES') {
sh "until [ \$(docker logs ${webHostname} --tail 50 2>&1 | grep 'Server startup' | wc -l) -gt 0 ]; do sleep 10; done"
}
}
我想知道的是如何使用 Bitnami Jenkins 在此 EC2 实例中创建子域。因此,不是通过 http://mydomain:9999 访问我的应用程序,而是可以通过子域的 url http://subdomain.mydomain.com 或扩展名为 http://mydomain.com/extension 的普通域来访问它.
我不知道怎么弄,因为bitnami jenkins的image有tomcat,apache2等,我都不知道用的是哪一个。我认为是 tomcat,因为那是他进行 Jenkins war 的地方。甚至在我每次运行我的管道时创建一个不同的子域也可能很棒。
再次感谢。
最佳答案
我遇到了一个非常相似的问题,我将子域的 CNAME 配置为指向运行我的 docker 容器的同一台机器,启动了一个 Nginx 反向代理,它监听所有 docker 容器,然后转发所有流量从端口 80 到所需的容器。在生产中也很有魅力。这样一来,一台机器就可以为多个具有不同子域的 docker 容器提供服务:) 如果不清楚,请告诉我,我可以提供示例和链接来解决问题。
这是我正在使用的 nginx docker 镜像,它监听机器上的所有容器,并根据容器已启动的环境变量将 http 请求转发到特定容器,设置子域变量,如中所述下面链接的自述文件。 enter link description here
关于docker - 如何创建子域以公开运行到 Jenkins 管道中的 docker 容器中的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50202416/