繁体   English   中英

将docker-compose文件转换为bash以自动运行测试

[英]Converting docker-compose file to bash to auto run tests

我目前正在开发一个应用程序,并且想在将代码投入生产之前自动测试Express。

我有一个docker-compose文件,可以用来运行测试

version: '8'
services:
  express:
    build: services/comp/express
    ports:
      - "3000:3000"
  database:
    image: mongo:3.4.0
    ports:
      - "27017:27017"

但是我想能够通过bash脚本运行它们(我不希望两个docker-compose文件)。

我已经尝试过命令

docker run -d -p 27017:27017 mongo:3.4.0

运行我的数据库并运行我尝试过的快递服务器

docker build -t express_image ./comp/services/express/.
docker run -p 3000:3000 -t express_image

但是,我无法像这样运行测试。 我在第一次尝试时遇到错误,无法连接到数据库,因此我想我的数据库使用了错误的主机。 当使用docker-compose文件时,我尝试使用const dbHost = 'mongodb://database/test-db'; 连接到有效的数据库。 在尝试使用上述命令运行时,我尝试了

const dbHost = 'mongodb://localhost:27017/';

关于我在通过终端旋转两个容器时做错了什么的任何建议?

我从上面了解到..在使用单个docker-compose进行自动测试时,您使用了const dbHost ='mongodb://database/test-db' ,并且工作正常。

现在,您旋转了没有docker-compose的容器,并尝试使用const dbHost = 'mongodb://localhost:27017/';从快速容器访问db const dbHost = 'mongodb://localhost:27017/';

无法工作的原因..这里的本地主机是您的快速容器,而不是您已映射mongodb容器端口的Docker主机。

替换为-> const dbHost = 'mongodb://${docker_host_ip}:27017/';

Docker_host_ip将是用于联网的docker_bridge的IP。 类似于172.16.0.1(对于Docker主机)。

您需要做一些事情来使Docker创建和使用内部网络,以便其内部DNS解析有效。 Docker Compose会自动为您执行此操作,但是如果您正在手动运行Docker命令,则需要手动进行操作。

首先,使用完全默认的选项创建网络:

docker network create mean

然后,当您运行容器时,将它们附加到此网络,并明确为其指定名称:

docker run -d --net mean --name database -p 27017:27017 mongo:3.6.2
docker build -t expressapp ./services/express
docker run -d --net mean --name express -p 3000:3000 expressapp

如前所述,如果数据库位置在代码中是恒定的,那么一旦更改数据库位置,您将发现这很不灵活。 您可以从环境变量中进行设置,使用Node代码中的process.env并使用docker run -e选项设置运行容器时的实际位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM