首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于集成测试的docker中的Couchbase :使端口8092、8093、8094和8095可配置为能够使用docker的随机端口

用于集成测试的docker中的Couchbase :使端口8092、8093、8094和8095可配置为能够使用docker的随机端口
EN

Stack Overflow用户
提问于 2019-12-11 00:51:36
回答 1查看 371关注 0票数 5

我正在使用Couchbase java client SDK 2.7.9,在尝试运行自动化集成测试时遇到了一个问题。在这样的测试中,我们通常使用随机端口,以便能够在相同的Jenkins从设备上运行相同的东西(例如,使用docker )。

但是,使用客户端,我们可以指定许多自定义端口,但不能指定8092、8093、8094和8095。

流行的TestContainers模块还提到,这些端口必须在其Couchbase模块中保持静态:https://www.testcontainers.org/modules/databases/couchbase/ 1

显然,还可以在服务器级别更改这些端口。

示例:

Docker-compose.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: '3.0'
services:
  rapid_test_cb:
    build:
      context: ""
      dockerfile: cb.docker
    ports:
      - "8091"
      - "8092"
      - "8093"
      - "11210"

docker镜像是‘couchbase:community-5.1.1’

在内部,端口是上面写入的端口,但在外部,它们是随机的。在客户机级,您可以设置bootstrapHttpDirectPort和bootstrapCarrierDirectPort,但显然8092和8093端口是从服务器端获取的(谁不知道哪个端口分配给了他)。

我想问您是否可以在客户端级更改这些端口,如果不能,请认真考虑添加该功能。

EN

回答 1

Stack Overflow用户

发布于 2019-12-11 00:51:36

因此,正如Couchbase team here所讨论的,

这真的是不可能的。所以我们找到了一种方法,使用Gradle的docker compose插件使其工作,但我想它可以在不同的情况下工作(TestContainer可以使用类似的系统)。

docker-compose.yml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: '3.0'
services:
  rapid_test_cb:
    build:
      context: ""
      dockerfile: cb.docker
    ports:
      - "${COUCHBASE_RANDOM_PORT_8091}:${COUCHBASE_RANDOM_PORT_8091}"
      - "${COUCHBASE_RANDOM_PORT_8092}:${COUCHBASE_RANDOM_PORT_8092}"
      - "${COUCHBASE_RANDOM_PORT_8093}:${COUCHBASE_RANDOM_PORT_8093}"
      - "${COUCHBASE_RANDOM_PORT_11210}:${COUCHBASE_RANDOM_PORT_11210}"
    environment:
      COUCHBASE_RANDOM_PORT_8091: ${COUCHBASE_RANDOM_PORT_8091}
      COUCHBASE_RANDOM_PORT_8092: ${COUCHBASE_RANDOM_PORT_8092}
      COUCHBASE_RANDOM_PORT_8093: ${COUCHBASE_RANDOM_PORT_8093}
      COUCHBASE_RANDOM_PORT_11210: ${COUCHBASE_RANDOM_PORT_11210}

cb.docker:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM couchbase:community-5.1.1
COPY configure-node.sh /opt/couchbase
#HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost:8091/pools || exit 1
RUN chmod u+x /opt/couchbase/configure-node.sh
RUN echo "{rest_port, 8091}.\n{query_port, 8093}.\n{memcached_port, 11210}." >> /opt/couchbase/etc/couchbase/static_config
CMD ["/opt/couchbase/configure-node.sh"]

configure-node.sh:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

poll() {
  # The argument supplied to the function is invoked using "$@", we check the return value with $?
  "$@"
  while [ $? -ne 0 ]
    do
      echo 'waiting for couchbase to start'
      sleep 1
      "$@"
  done
}

set -x
set -m
if [[ -n "${COUCHBASE_RANDOM_PORT_8092}" ]]; then
    sed -i "s|8092|${COUCHBASE_RANDOM_PORT_8092}|g" /opt/couchbase/etc/couchdb/default.d/capi.ini
fi
if [[ -n "${COUCHBASE_RANDOM_PORT_8091}" ]]; then
    sed -i "s|8091|${COUCHBASE_RANDOM_PORT_8091}|g" /opt/couchbase/etc/couchbase/static_config
fi
if [[ -n "${COUCHBASE_RANDOM_PORT_8093}" ]]; then
    sed -i "s|8093|${COUCHBASE_RANDOM_PORT_8093}|g" /opt/couchbase/etc/couchbase/static_config
fi
if [[ -n "${COUCHBASE_RANDOM_PORT_11210}" ]]; then
    sed -i "s|11210|${COUCHBASE_RANDOM_PORT_11210}|g" /opt/couchbase/etc/couchbase/static_config
fi

/entrypoint.sh couchbase-server &
poll curl -s localhost:${COUCHBASE_RANDOM_PORT_8091:-8091}

# Setup index and memory quota
curl -v -X POST http://127.0.0.1:${COUCHBASE_RANDOM_PORT_8091:-8091}/pools/default --noproxy '127.0.0.1' -d memoryQuota=300 -d indexMemoryQuota=300
# Setup services
curl -v http://127.0.0.1:${COUCHBASE_RANDOM_PORT_8091:-8091}/node/controller/setupServices --noproxy '127.0.0.1' -d services=kv%2Cn1ql%2Cindex
# Setup credentials
curl -v http://127.0.0.1:${COUCHBASE_RANDOM_PORT_8091:-8091}/settings/web --noproxy '127.0.0.1' -d port=${couchbase_random_port_8091:-8091} -d username=Administrator -d password=password
# Load the rapid_test bucket
curl -X POST -u Administrator:password -d name=rapid_test -d ramQuotaMB=128 --noproxy '127.0.0.1' -d authType=sasl -d saslPassword=password -d replicaNumber=0 -d flushEnabled=1 -v http://127.0.0.1:${COUCHBASE_RANDOM_PORT_8091:-8091}/pools/default/buckets

fg 1

Gradle's docker compose配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def findRandomOpenPortOnAllLocalInterfaces = {
    new ServerSocket(0).withCloseable { socket ->
        return socket.getLocalPort().intValue()
    }
}

dockerCompose {
    environment.put 'COUCHBASE_RANDOM_PORT_8091', findRandomOpenPortOnAllLocalInterfaces()
    environment.put 'COUCHBASE_RANDOM_PORT_8092', findRandomOpenPortOnAllLocalInterfaces()
    environment.put 'COUCHBASE_RANDOM_PORT_8093', findRandomOpenPortOnAllLocalInterfaces()
    environment.put 'COUCHBASE_RANDOM_PORT_11210', findRandomOpenPortOnAllLocalInterfaces()
}
integTest.doFirst {
    systemProperty 'com.couchbase.bootstrapHttpDirectPort', couchbase_random_port_8091
    systemProperty 'com.couchbase.bootstrapCarrierDirectPort', couchbase_random_port_11210
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59277436

复制
相关文章
Javascript中对象如何检查key(键)是否存在
如果要特别测试对象实例的属性(而不是继承的属性),请使用hasOwnProperty:
IT工作者
2022/02/09
26.7K0
python 检查是否存在ddos攻击
import dpkt import socket import optparse
用户5760343
2019/07/31
3.7K0
python 检查是否存在ddos攻击
Node.js中如何检查是否存在某个目录
Node.js fs本地模块提供了几种有用的方法,可用于处理目录。 检查Node.js中是否存在某个目录的最简单方法是使用fs.existsSync()方法。
ccf19881030
2020/10/29
11.9K0
Kettle之“检查表是否存在”
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53884107
用户1148526
2019/05/25
3.8K0
在bash脚本中如何检查一个命令是否存在
避免使用 which。它是一个外部进程,相对而言 hash、type 或 command 这样的内置程序执行效率更高,你还可以依靠内置程序来实际执行所需的操作,而且外部命令的效果很容易因系统而异。
程序熵
2023/09/25
4150
在bash脚本中如何检查一个命令是否存在
SonarQube检查项目中是否存在秘钥信息
持续集成和交付(CI / CD)管道旨在支持每天数以万计的部署。生产部署的频率不能以牺牲安全为代价,安全流程也需要与CI / CD管道集成在一起。这就是为什么我们在从开发到生产的流水线的每个步骤中都添加了持续的安全验证,以帮助确保我们的应用程序始终是安全的。
DevOps云学堂
2021/04/23
2.3K0
使用 shell(bash) 来检查 git 分支是否存在
不多说,直接上代码 localBranch=$(git branch|awk '{print $2}') if [ -n "localBranch" ]; then echo "存在该分支,并不进行创建" else echo "该分支不存在" fi
用户2353021
2020/05/11
3.6K0
检查自己的代码是否存在内存泄露
造成内存泄露的根本原因就是我们写的代码中存在某些对象长期占用内存,得不到释放,且这个对象占用的内存会逐步增加,导致 v8 无法回收,从而造成的服务的异常和不稳定,甚至是服务的中断和崩溃。
zz_jesse
2020/03/17
3K0
PHP检查对象或类中是否存在属性
$obj = \app\common\library\Email::instance(); $obj->p=889; if(isset($obj->p)){ echo 66; }else{ echo 99; } die; isset既可以判断对象的属性是否存在,也可以判断数组的键名是否存在 未经允许不得转载:肥猫博客 » PHP检查对象或类中是否存在属性
超级小可爱
2023/02/20
4.2K0
VBA应用技巧:检查文件夹是否已存在
在使用VBA操作文件时,如果不先核实要操作的文件夹是否已存在,则有可能会导致代码出错。例如,在创建文件夹时、在到指定的文件夹中获取文件时。因此,我们需要先使用代码判断是否已存在相应的文件夹。
fanjy
2022/11/16
4K0
LeetCode 1346. 检查整数及其两倍数是否存在
给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。
村雨遥
2020/05/06
1.5K0
CA2100:检查 SQL 查询是否存在安全漏洞
一种方法使用按该方法的字符串参数生成的字符串设置 System.Data.IDbCommand.CommandText 属性。
用户4268038
2022/02/20
1.8K0
检查整数及其两倍数是否存在 python3
给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。
SingYi
2022/07/14
1.4K0
检查整数及其两倍数是否存在 python3
LeetCode 1391. 检查网格中是否存在有效路径(BFS)
给你一个 m x n 的网格 grid。网格里的每个单元都代表一条街道。grid[i][j] 的街道可以是:
Michael阿明
2020/07/13
5K0
RedHat 8 如何检查端口是否联通
其中可能有各种原因导致端口没有联通,通常为操作系统本身的防火墙,托管服务器中心的防火墙等。
HoneyMoose
2021/09/04
2.2K0
RedHat 8 如何检查端口是否联通
Google 现在可以更轻松地检查你的密码是否泄露
Google 拥有一个可在 Chrome 和 Android 之间同步的密码管理器,现在该公司正在添加“密码检查”功能,该功能将分析你的登录名,以确保它们不属于大规模密码泄露事件的一部分。密码检查功能此前已可以作为扩展程序使用,但是现在 Google 正在将其直接构建到 Google 帐户控件中。它会在 http://passwords.google.com(这是 Google 密码管理器的 URL)上突出显示。
用户8670130
2021/09/18
2.4K0
LeetCode 1346. 检查整数及其两倍数是否存在(哈希)
给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。
Michael阿明
2020/07/13
1.2K0
如何判断Javascript对象是否存在
Javascript语言的设计不够严谨,很多地方一不小心就会出错。 举例来说,请考虑以下情况。 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明。用自然语言描述的算法如下:   if (myObj不存在){     声明myObj;   } 你可能会觉得,写出这段代码很容易。但是实际上,它涉及的语法问题,远比我们想象的复杂。Juriy Zaytsev指出,判断一个Javascript对象是否存在,有超过50种写法。只有对Javascript语言的实现细节非常清楚,才可能分
ruanyf
2018/04/12
2.8K0
如何检查linux是否安装了php
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113426.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/07
4.3K0
如何检查linux是否安装了php
点击加载更多

相似问题

检查图中是否存在边

12

如何检查星图中是否存在边

12

如何最好地检查cookie是否存在?

12

如何使用Like检查是否存在匹配

20

检查地图中是否存在ArrayList

111
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文