我是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
从图像文档中,当我用:
运行容器时$ docker run build-name -d postgres
我看到容器需要时间来启动postgresql服务。
当我运行没有“-d postgres”param的容器时:
$ docker run build-name
由于“无法连接到服务器”,服务无法启动且测试失败。
问题:
一个。如何在postgresql服务启动后运行测试?
B中。我看到了一些使用docker-composer的例子,但是我可以在没有作曲家的情况下这样做吗?
由于
答案 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