- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关于如何以分离模式运行容器,存在许多问题。
我的问题虽然有点特定于在分离模式容器中运行Atlassian Bitbucket服务器。
我尝试将以下作为dockerfile中的最后一层,当我使用-d运行容器时,该过程未启动
运行/opt/atlassian-bitbucket/bin/start-bitbucket.sh
我尝试如下使用ENTRYPOINT
ENTRYPOINT [“/opt/atlassian-bitbucket/bin/start-bitbucket.sh”]
但是容器始终在启动脚本完成后退出。
不知道是否有人在容器中设置了Bitbucket数据中心,但我很好奇他们将如何运行多个具有相同镜像的容器并使它们加入单个群集。
最佳答案
全面披露:我为Atlassian Premier Support工作,与我们的Bitbucket Server团队紧密合作,并且在过去几年中一直是atlassian/bitbucket-server
Docker镜像的主要维护者。
精简版
第一:使用official image,多年来我们解决了许多问题,因此与其尝试从头开始,不如使用我们的作为基础。
第二:您确实可以在Docker中运行数据中心集群。我的个人测试环境由3个群集节点和几个Smart Mirror组成,所有这些镜像均使用官方镜像,前面的HAProxy充当负载平衡器,并使用外部Elasticsearch实例管理搜索。在上面的自述文件中查看常用配置选项的列表-您可能需要的选项可以通过传递环境变量进行设置
长版
又称为“如何在测试环境中启动完整的DC群集?”
这是我很久以前为我们自己的内部支持团队整理的一个简单教程。它使用自定义的HAProxy Docker容器为您提供现成的负载平衡器。它旨在在单个主机上进行测试,因此,如果您想做一些不同的事情或与生产部署更接近,这将无法解决。
这里有很多要讨论的内容,所以让我们从基础开始。
联网
有几种方法可以连接各个Docker容器,以便彼此找到并进行通信(例如--link
参数),但是Docker Network迄今为止最灵活。通过专用网络,我们可以获得:
--name
参数定义)相互查找。但是,与真实DNS不同,当容器关闭时,其DNS解析将不复存在。这可能会给诸如HAProxy之类的服务造成一些问题-但我们稍后会解决。另外值得注意的是,这不会设置机器的主机名,如果需要,则需要单独设置。 docker network create --driver bridge \
--subnet=10.255.0.0/16 \
atlasNetwork
$BITBUCKET_HOME
或数据库文件)需要存储在容器本身之外的某个位置。对于我们的测试环境,我们可以直接将它们直接存储在本地操作系统的主机上。这意味着我们可以使用我们最喜欢的文本编辑器来编辑配置文件,这非常方便!
~/dockerdata
文件夹中。无需创建此文件夹或任何子文件夹,因为Docker会自动执行此操作。如果要使用其他文件夹,请确保更新以下示例。
docker run -d \
--name postgres \
--restart=unless-stopped \
-e POSTGRES_PASSWORD=mysecretpassword \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v ~/dockerdata/postgres:/var/lib/postgresql/data/pgdata \
--network=atlasNetwork \
-p 5432:5432 \
postgres:latest
-d
--name postgres
--restart=unless-stopped
-e POSTGRES_PASSWORD=mysecretpassword
-e PGDATA=/var/lib/postgresql/data/pgdata
-v ~/dockerdata/postgres:/var/lib/postgresql/data/pgdata
/var/lib/postgresql/data/pgdata
文件夹安装到位于主机~/dockerdata/postgres
上的外部卷。该文件夹将自动创建--network=atlasNetwork
-p 5432:5432
localhost:5432
上访问Postgres。对于其他容器来说,访问该服务不是必需的,但是对于我们来说,有必要访问它postgres:latest
127.0.0.1 postgres
postgres:5432
访问实例
CREATE USER bitbucket WITH PASSWORD 'bitbucket';
CREATE DATABASE bitbucket WITH OWNER bitbucket ENCODING 'UTF8';
# We need to run two commands because psql won't let
# you run CREATE DATABASE from a multi-command string
docker exec -it postgres psql -U postgres -c \
"CREATE USER bitbucket WITH PASSWORD 'bitbucket';"
docker exec -it postgres psql -U postgres -c \
"CREATE DATABASE bitbucket WITH OWNER bitbucket ENCODING 'UTF8';"
docker pull dchevell/bitbucket-elasticsearch:latest
docker run -d \
--name elasticsearch \
-e AUTH_BASIC_USERNAME=bitbucket \
-e AUTH_BASIC_PASSWORD=mysecretpassword \
-v ~/dockerdata/elastic:/usr/share/elasticsearch/data \
--network=atlasNetwork \
-p 9200:9200 \
dchevell/bitbucket-elasticsearch:latest
dchevell/bitbucket-elasticsearch
是一个预先配置的Docker镜像,是根据Atlassian的
Install and configure a remote Elasticsearch instance KB文章中的说明进行设置的。已为您安装了Atlassian的Buckler安全插件,您可以使用上述环境变量配置用户名和密码。再次,我们将数据卷安装到主机上,将其连接到Docker网络,并发布端口,以便我们可以直接访问它。这仅是出于故障排除的目的,因此,如果您想在本地Elasticsearch实例中四处闲逛而无需通过Bitbucket,则可以。
127.0.0.1 elasticsearch
10.255.0.0/16
,并且Docker将在最后一个八位位组上动态分配容器地址(例如
10.255.0.1
,
10.255.0.2
等)。既然知道这一点,我们就可以使用倒数第二个八位字节安全地为Bitbucket节点分配静态IP地址:
10.255.1.1
10.255.1.2
10.255.1.3
docker run -d \
--name bitbucketdc \
--hostname bitbucketdc \
-v ~/dockerdata/haproxy:/usr/local/etc/haproxy \
--network=atlasNetwork \
-e HTTP_NODES="10.255.1.1:7990,10.255.1.2:7990,10.255.1.3:7990" \
-e SSH_NODES="10.255.1.1:7999,10.255.1.2:7999,10.255.1.3:7999" \
-p 80:80 \
-p 443:443 \
-p 7999:7999 \
-p 8001:8001 \
dchevell/bitbucket-haproxy:latest
127.0.0.1 bitbucketdc
docker run -d \
--name=bitbucket_1 \
-e ELASTICSEARCH_ENABLED=false \
-e HAZELCAST_NETWORK_MULTICAST=true \
-e HAZELCAST_GROUP_NAME=bitbucket-docker \
-e HAZELCAST_GROUP_PASSWORD=bitbucket-docker \
-e SERVER_PROXY_NAME=bitbucketdc \
-e SERVER_PROXY_PORT=443 \
-e SERVER_SCHEME=https \
-e SERVER_SECURE=true \
-v ~/dockerdata/bitbucket-shared:/var/atlassian/application-data/bitbucket/shared \
--network=atlasNetwork \
--ip=10.255.1.1 \
-p 7001:7990 \
-p 7991:7999 \
atlassian/bitbucket-server:latest
docker run -d \
--name=bitbucket_2 \
-e ELASTICSEARCH_ENABLED=false \
-e HAZELCAST_NETWORK_MULTICAST=true \
-e HAZELCAST_GROUP_NAME=bitbucket-docker \
-e HAZELCAST_GROUP_PASSWORD=bitbucket-docker \
-e SERVER_PROXY_NAME=bitbucketdc \
-e SERVER_PROXY_PORT=443 \
-e SERVER_SCHEME=https \
-e SERVER_SECURE=true \
-v ~/dockerdata/bitbucket-shared:/var/atlassian/application-data/bitbucket/shared \
--network=atlasNetwork \
--ip=10.255.1.2 \
-p 7002:7990 \
-p 7992:7999 \
atlassian/bitbucket-server:latest
docker run -d \
--name=bitbucket_3 \
-e ELASTICSEARCH_ENABLED=false \
-e HAZELCAST_NETWORK_MULTICAST=true \
-e HAZELCAST_GROUP_NAME=bitbucket-docker \
-e HAZELCAST_GROUP_PASSWORD=bitbucket-docker \
-e SERVER_PROXY_NAME=bitbucketdc \
-e SERVER_PROXY_PORT=443 \
-e SERVER_SCHEME=https \
-e SERVER_SECURE=true \
-v ~/dockerdata/bitbucket-shared:/var/atlassian/application-data/bitbucket/shared \
--network=atlasNetwork \
--ip=10.255.1.3 \
-p 7003:7990 \
-p 7993:7999 \
atlassian/bitbucket-server:latest
ELASTICSEARCH_ENABLED=false
的功能,以防止Elasticsearch在容器中启动。官方docker镜像本身支持其余的Hazelcast属性,因为Bitbucket 5基于Springboot,可以为我们自动将环境变量转换为其等效的点属性。
http://elasticsearch:9200
并使用我们在创建Elasticsearch容器时配置的用户名和密码。
关于docker - 如何在分离模式下将Bitbucket服务器作为容器启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55863657/
对此感到疯狂,真的缺少一些东西。 我有webpack 4.6.0,webpack-cli ^ 2.1.2,所以是最新的。 在文档(https://webpack.js.org/concepts/mod
object Host "os.google.com" { import "windows" address = "linux.google.com" groups = ["linux"] } obj
每当我安装我的应用程序时,我都可以将数据库从 Assets 文件夹复制到 /data/data/packagename/databases/ .到此为止,应用程序工作得很好。 但 10 或 15 秒后
我在 cc 模式缓冲区中使用 hideshow.el 来折叠我不查看的文件部分。 如果能够在 XML 文档中做到这一点就好了。我使用 emacs 22.2.1 和内置的 sgml-mode 进行 xm
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
根据java: public Scanner useDelimiter(String pattern) Sets this scanner's delimiting pattern to a patt
我读过一些关于 PRG 模式以及它如何防止用户重新提交表单的文章。比如this post有一张不错的图: 我能理解为什么在收到 2xx 后用户刷新页面时不会发生表单提交。但我仍然想知道: (1) 如果
看看下面的图片,您可能会清楚地看到这一点。 那么如何在带有其他一些 View 的简单屏幕中实现没有任何弹出/对话框/模式的微调器日期选择器? 我在整个网络上进行了谷歌搜索,但没有找到与之相关的任何合适
我不知道该怎么做,我一直遇到问题。 以下是代码: rows = int(input()) for i in range(1,rows): for j in range(1,i+1):
我想为重写创建一个正则表达式。 将所有请求重写为 index.php(不需要匹配),它不是以/api 开头,或者不是以('.html',或'.js'或'.css'或'.png'结束) 我的例子还是这样
MVC模式代表 Model-View-Controller(模型-视图-控制器) 模式 MVC模式用于应用程序的分层开发 Model(模型) - 模型代表一个存取数据的对象或 JAVA PO
我想为组织模式创建一个 RDF 模式世界。您可能知道,组织模式文档基于层次结构大纲,其中标题是主要的分组实体。 * March auxiliary :PROPERTIES: :HLEVEL: 1 :E
我正在编写一个可以从文件中读取 JSON 数据的软件。该文件包含“person”——一个值为对象数组的对象。我打算使用 JSON 模式验证库来验证内容,而不是自己编写代码。符合代表以下数据的 JSON
假设我有 4 张 table 人 公司 团体 和 账单 现在bills/persons和bills/companys和bills/groups之间是多对多的关系。 我看到了 4 种可能的 sql 模式
假设您有这样的文档: doc1: id:1 text: ... references: Journal1, 2013, pag 123 references: Journal2, 2014,
我有这个架构。它检查评论,目前工作正常。 var schema = { id: '', type: 'object', additionalProperties: false, pro
这可能很简单,但有人可以解释为什么以下模式匹配不明智吗?它说其他规则,例如1, 0, _ 永远不会匹配。 let matchTest(n : int) = let ran = new Rand
我有以下选择序列作为 XML 模式的一部分。理想情况下,我想要一个序列: 来自 my:namespace 的元素必须严格解析。 来自任何其他命名空间的元素,不包括 ##targetNamespace和
我希望编写一个 json 模式来涵盖这个(简化的)示例 { "errorMessage": "", "nbRunningQueries": 0, "isError": Fals
首先,我是 f# 的新手,所以也许答案很明显,但我没有看到。所以我有一些带有 id 和值的元组。我知道我正在寻找的 id,我想从我传入的三个元组中选择正确的元组。我打算用两个 match 语句来做到这
我是一名优秀的程序员,十分优秀!