[英]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.