使用Docker / Docker compose运行Postgres迁移

吉萨尔马鲁克

我对这门科目还很陌生,所以如果这些是愚蠢的问题,请原谅。我想像这样在Docker容器中运行单元测试:

  • 启动没有表/数据的Postgres容器
  • 运行数据库迁移(我正在使用node-pg-migrate)来创建所有表
  • 用测试数据填充数据库
  • 用我的服务启动一个Node容器
  • 运行单元测试
  • 删除数据库
  • 关闭/删除所有容器(除非有错误)

我目前正在努力进行迁移。我创建FROM产品映像和产品映像RUN npm install --only=dev我的docker-compose.yml样子是这样的:

version: "3.7"
services:
    db:
        image: postgres
        environment: 
            POSTGRES_PASSWORD: test_pw
            POSTGRES_USER: test_user
            POSTGRES_DB: test_db

        ports:
            - '5432:5432'

    web:
        image: docker_tests
        environment:
            DATABASE_URL: postgres://test_user:test_pw@db:5432/test_db?ssl=false
            DATABASE_SSL: "false"
            DATABASE_PW: test_pw
            DATABASE_USER: test_user
            DATABASE_NAME: test_db
            DATABASE_HOST: db
        depends_on: 
            - db
        ports:
            - '1337:1337'

还有我的Dockerfile:

FROM docker_service
ENV NODE_ENV TEST
WORKDIR /usr/src/app
RUN npm install --only=dev
RUN ["./node_modules/.bin/node-pg-migrate", "up"]
EXPOSE 1337
CMD ["npm", "run", "test"]

运行合成文件时,两个容器都启动,我什至得到

No migrations to run!
Migration complete!

但是,如果我运行测试,则没有可用的表。迁移未应用于我的Postgres容器,并且RUN ["printenv"]在迁移后添加时很清楚原因:所需的DATABASE_URL不存在。我在Google上搜索后发现,其中指定的env变量docker-compose.yml仅在运行时可用,而在构建时不可用。但是,当我添加ENV DATABASE_URL ...到Dockerfile时,由于Postgres容器尚未启动,因此它当然无法连接到数据库。

我该如何解决这个问题?一种可能的解决方案是,./node_modules/.bin/node-pg-migrate up在两个容器都启动后立即在Web中运行,但是Docker只能有一个CMD,对吗?我用它来运行我的单元测试。

TL; DR:在运行单元测试之前,如何使用Docker服务容器中的node-pg-migrate在Docker Postgres容器中运行迁移?

非常感谢!

斯蒂芬·格鲁博维奇

我无法测试,但是这里是这个主意:

  • docker-entrypoint.sh在与Dockerfile相同的文件夹中有一个脚本
#!/usr/bin/env bash

./node_modules/.bin/node-pg-migrate up
exec "$@"
  • 更改Dockerfile以使用该脚本
FROM docker_service
ENV NODE_ENV TEST
WORKDIR /usr/src/app
RUN npm install --only=dev

COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod 777 /usr/local/bin/docker-entrypoint.sh && \
    ln -s usr/local/bin/docker-entrypoint.sh / # backwards compat

ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 1337
CMD ["npm", "run", "test"]

这样,docker-entrypoint.sh脚本将在您每次创建容器时执行npm run test,并且由于会在之后执行exec "$@"每个DB映像都有这种设置,我建议您看一下PostgreSQL Dockerfile入口点脚本


在执行迁移脚本之前,您可能需要诸如“等待它”之类的内容以确保数据库已启动。depends_on可以帮助您启动订单,但不要等待服务正常运行

资源控制撰写中的启动和关闭顺序

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

docker-compose时如何创建postgres数据库并运行迁移

来自分类Dev

使用mysql和自己的docker容器运行docker-compose

来自分类Dev

如何使用docker-compose.yml在Docker上运行Redis?

来自分类Dev

使用docker-compose运行Apache pulsar

来自分类Dev

使用Rider运行dotnet的Docker-compose

来自分类Dev

使用docker-compose运行拉图像

来自分类Dev

使用Rancher OS运行docker-compose

来自分类Dev

使用Docker运行TFS

来自分类Dev

docker 在 docker 中 docker compose

来自分类Dev

运行 docker-compose 的问题

来自分类Dev

将现有Docker容器迁移到Docker Compose

来自分类Dev

Django,Postgres,Docker-无法在Ubuntu 14.04 python 2.7.11上的数据库上运行迁移

来自分类Dev

使用 docker compose 进行编译

来自分类Dev

使用docker-compose启动后,Postgres立即关闭

来自分类Dev

使用持久卷启动 postgres 容器 [docker compose]

来自分类Dev

使用 docker compose 创建表和方案 postgres

来自分类Dev

在Windows中使用Docker Compose运行Kafka的问题

来自分类Dev

使用docker compose在后台运行ubuntu容器

来自分类Dev

在2020年使用docker-compose以root身份运行命令?

来自分类Dev

使用Docker Compose运行解析服务器

来自分类Dev

使用Nginx反向代理运行多个docker-compose文件

来自分类Dev

使用 docker compose 运行节点容器时出错

来自分类Dev

使用 docker compose 运行单个测试函数

来自分类Dev

使用docker在本地运行Travis

来自分类Dev

使用Docker运行构建过程

来自分类Dev

docker容器从Dockerfile运行,但不是从docker-compose运行

来自分类Dev

VS Code使用docker-compose在Docker中运行和调试Python

来自分类Dev

我如何将使用--config选项运行的docker应用于docker compose

来自分类Dev

使用与父用户相同的UID / GID运行docker或docker-compose的简单方法?

Related 相关文章

  1. 1

    docker-compose时如何创建postgres数据库并运行迁移

  2. 2

    使用mysql和自己的docker容器运行docker-compose

  3. 3

    如何使用docker-compose.yml在Docker上运行Redis?

  4. 4

    使用docker-compose运行Apache pulsar

  5. 5

    使用Rider运行dotnet的Docker-compose

  6. 6

    使用docker-compose运行拉图像

  7. 7

    使用Rancher OS运行docker-compose

  8. 8

    使用Docker运行TFS

  9. 9

    docker 在 docker 中 docker compose

  10. 10

    运行 docker-compose 的问题

  11. 11

    将现有Docker容器迁移到Docker Compose

  12. 12

    Django,Postgres,Docker-无法在Ubuntu 14.04 python 2.7.11上的数据库上运行迁移

  13. 13

    使用 docker compose 进行编译

  14. 14

    使用docker-compose启动后,Postgres立即关闭

  15. 15

    使用持久卷启动 postgres 容器 [docker compose]

  16. 16

    使用 docker compose 创建表和方案 postgres

  17. 17

    在Windows中使用Docker Compose运行Kafka的问题

  18. 18

    使用docker compose在后台运行ubuntu容器

  19. 19

    在2020年使用docker-compose以root身份运行命令?

  20. 20

    使用Docker Compose运行解析服务器

  21. 21

    使用Nginx反向代理运行多个docker-compose文件

  22. 22

    使用 docker compose 运行节点容器时出错

  23. 23

    使用 docker compose 运行单个测试函数

  24. 24

    使用docker在本地运行Travis

  25. 25

    使用Docker运行构建过程

  26. 26

    docker容器从Dockerfile运行,但不是从docker-compose运行

  27. 27

    VS Code使用docker-compose在Docker中运行和调试Python

  28. 28

    我如何将使用--config选项运行的docker应用于docker compose

  29. 29

    使用与父用户相同的UID / GID运行docker或docker-compose的简单方法?

热门标签

归档