使用postgres数据库进行app测试的Docker容器

时间:2018-04-26 20:05:40

标签: postgresql docker testing

我是Docker的新手。

我正在尝试在Docker容器中运行我的节点应用程序测试。 我想用一个真正的postgres db运行测试。 我正在使用以下Dockerfile创建此容器:

# Set image
FROM postgres:alpine
# Install node latest
RUN apk add --update nodejs nodejs-npm
# Set working dir
WORKDIR .
# Copy the current directory contents into the container at .
ADD src src
ADD .env.testing .env
ADD package.json .
ADD package-lock.json .

# Run tests
CMD npm install && npm run coverage
  1. 从图像文档中,当我用:

    运行容器时

    $ docker run build-name -d postgres

  2. 我看到容器需要时间来启动postgresql服务。

    1. 当我运行没有“-d postgres”param的容器时:

      $ docker run build-name

    2. 由于“无法连接到服务器”,服务无法启动且测试失败。

      问题:

      一个。如何在postgresql服务启动后运行测试?

      B中。我看到了一些使用docker-composer的例子,但是我可以在没有作曲家的情况下这样做吗?

      由于

2 个答案:

答案 0 :(得分:1)

如果目标只是在 Postgres 容器中运行测试,一个解决方案可能是在postgres:alpine派生图像中安装 NodeJs 并运行容器通常。数据库启动后,您可以使用npm运行docker exec,如下所示:

docker exec <container_id> npm run coverage

答案 1 :(得分:1)

感谢@Bogdan,我找到了完整的解决方案:

Dockerfile应该是:

# Set image
FROM postgres:alpine
# Install node latest
RUN apk add --update nodejs nodejs-npm
# Set working dir
WORKDIR .
# Copy the current directory contents into the container at .
ADD src src
ADD .env.testing .env
ADD package.json .
ADD package-lock.json .
# Install
RUN npm install

# Init container
CMD psql -U postgres -c "SELECT 1;" postgres

构建容器:

$ docker build -t test .

运行容器:

$ docker run --name startedtest -d test -d postgres

在conatiner运行后运行测试:

$ docker exec startedtest some_create_schema_script && npm run coverage