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

将docker compose文件转换为bash以自动运行测试,bash,express,docker,Bash,Express,Docker,我目前正在开发一个应用程序,我想在将代码投入生产之前自动测试express 我有一个docker compose文件,可以用来运行测试 version: '8' services: express: build: services/comp/express ports: - "3000:3000" database: image: mongo:3.4.0 ports: - "27017:27017" 但是,我希望能够通过bash脚

我目前正在开发一个应用程序,我想在将代码投入生产之前自动测试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
要运行我的数据库和express服务器,我已经尝试过了

docker build -t express_image ./comp/services/express/.
docker run -p 3000:3000 -t express_image
然而,我不能让我的测试像这样运行。我在第一次尝试时遇到一个无法连接到数据库的错误,因此我认为我的数据库使用了错误的主机。当使用docker编写文件时,我尝试了
constdbhost='1〕mongodb://database/test-db';
连接到可用的数据库。在尝试使用上述命令运行时,我尝试了

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

有没有关于我把两个集装箱旋转通过一个码头的错误的建议?

我从上面了解到的。。在使用single docker compose自动测试Express时,您使用了
const dbHost=mongodb://database/test-db“
而且效果很好

现在,您可以在没有docker compose的情况下旋转容器,并尝试使用
const dbHost=”从express容器访问dbmongodb://localhost:27017/';

不工作的原因。。这里本地主机是您的express容器,而不是您映射mongodb容器端口的Docker主机

替换为->
const dbHost='mongodb://${docker\u host\u ip}:27017/'


Docker_host_ip将是用于联网的Docker_网桥的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

如图所示,如果数据库位置在代码中是一个常量,那么如果更改数据库位置,您会发现这是不灵活的。您可以使用节点代码中的
process.env
docker run-e
选项从环境变量设置它,以设置运行容器时的实际位置。

无法解决此错误。第一次尝试时仍然无法连接。谢谢你的回答。如果可能的话,你能提供你想要做的事情的示例代码(简单的DB连接代码和express docekrfile代码)吗。这样我就可以在我的系统上产生问题并进行检查。这并不能解决错误。第一次尝试时仍然无法连接。谢谢你的回答