错误:在 docker 容器中导入 Postgres 数据库

2024-03-25

我正在 docker 容器中运行 ruby​​ on Rails 应用程序。我想在 postgres 容器中创建并恢复数据库转储。 但是我

以下是我到目前为止所做的事情:

1)添加了 bash 脚本/docker-entrypoint-initdb.d文件夹。脚本只是创建数据库:

psql -U docker -d postgres -c 'create database dbname;'

RESULT:数据库已创建,但 Rails 服务器退出并显示代码 0。错误:web_1 exited with code 0

2)添加之前要执行的脚本docker-compose up.

# Run docker db container
echo "Running db container"
docker-compose run -d db

# Sleep for 10 sec so that container have time to run
echo "Sleep for 10 sec"
sleep 10

echo 'Copying db_dump.gz to db container'
docker cp db_dump/db_dump.gz $(docker-compose ps -q db):/

# Create database `dbname`
echo 'Creating database `dbname`'
docker exec -i $(docker-compose ps -q db) psql -U docker -d postgres -c 'create database dbname;'

echo 'importing database `dbname`'
docker exec -i $(docker-compose ps -q db) bash -c "gunzip -c /db_dump.gz | psql -U postgres dbname"

RESULT:数据库创建并恢复数据。但是另一个容器在运行 Web 应用程序服务器时运行docker-compose up.

docker--compose.yml:

version: '2'

services:

  db:
    image: postgres

    environment:
      - POSTGRES_PASSWORD=docker
      - POSTGRES_USER=docker

  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0' -d
    image: uname/application
    links:
      - db
    ports:
      - "3000:3000"
    depends_on:
      - db
    tty: true

有人可以帮忙创建和导入数据库吗?

EDIT:

我尝试了另一种方法添加POSTGRES_DB=db_name环境变量在docker-compose.yml文件,以便在运行应用程序后创建数据库(docker-compose up),我将导入数据库。但出现错误:web_1 exited with code 0.

我很困惑为什么会收到此错误(在第一种和第三种方法中),似乎有些东西搞砸了docker-compose file.


设置数据库转储挂载

您需要将转储安装到容器中,以便可以访问它。 docker-compose.yml 中类似这样的内容:

db:
  volumes:
    - './db_dump:/db_dump'

建立一个名为的本地目录db_dump并放置你的db_dump.gz文件在那里。

启动数据库容器

Use POSTGRES_DB在环境中(正如您在问题中提到的)自动创建数据库。开始db本身,无需 Rails 服务器。

docker-compose up -d db

导入数据

等待几秒钟以使数据库可用。然后,导入您的数据。

docker-compose exec db gunzip /db_dump/db_dump.gz
docker-compose exec db psql -U postgres -d dbname -f /db_dump/db_dump.gz
docker-compose exec db rm -f /db_dump/db_dump.gz

您还可以创建一个脚本来执行此导入,将其粘贴到您的映像中,然后使用单个 docker-compose 命令来调用它。或者您可以让入口点脚本检查转储文件是否存在,如果存在,则解压缩并导入它......无论您需要做什么。

启动rails服务器

docker-compose up -d web

自动化这个

如果您手动执行此操作来准备新设置,那么您就完成了。如果您需要将其自动化到工具链中,您可以在脚本中执行其中一些操作。只需单独启动容器,在其间进行数据库导入,然后使用sleep以弥补任何启动延迟。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误:在 docker 容器中导入 Postgres 数据库 的相关文章

随机推荐

  • Ruby on Rails:如何在 Windows 上后台自动启动 WEBrick 服务器?

    为了在 Windows XP 上运行我的 Rails 应用程序 我打开命令行 cd 到应用程序的目录 然后运行rails server 我想自动化此操作 这样每次我打开计算机时 我所要做的就是输入localhost 3000在浏览器中 我怎
  • 使用 Python JSON 序列化类并更改属性大小写

    我想创建一个类的 JSON 表示形式并自动更改属性名称snake case to lowerCamelCase 因为我想遵守 Python 中的 PEP8 以及 JavaScript 命名约定 也许更重要的是 我正在与之通信的后端使用low
  • 使用 AUGraph 播放麦克风的声音

    当我使用AUGraph实现麦克风播放声音时 我有一个问题 在设备 iphone 3g 中 我只能从耳机的右侧听到 但在模拟器中效果很好 我可以从耳机的两侧听到声音 这是我用来将输入连接到输出的代码 AUGraphConnectNodeInp
  • jsonschema2pojo 中的 JSR-303 激活

    有一个地方在jsonschema2pojo描述启用可能性的文档JSR 303注释生成 https github com joelittlejohn jsonschema2pojo wiki Reference minimummaximum
  • Android中加载数据到TextView

    我有一个像 Yes No Dontknow 这样的 XML 标签 我正在解析 XML 文件并获取数据 现在我需要在单独的 TextView 中显示每个选项 即 是 应显示在一个 TextView 中 否 应显示在另一个 TextView 中
  • C# 构造函数之外的对象构造

    当涉及到设计类以及它们之间的 通信 时 我总是尝试以所有对象构造和组合都在对象构造函数中进行的方式进行设计 我不喜欢从外部进行对象构造和组合的想法 就像其他对象设置属性并调用我的对象上的方法来初始化它一样 当多个对象尝试对您的对象执行此操作
  • 通过javascript选择特定打印机

    我的计算机连接了两台打印机 我可以通过 JavaScript 代码选择特定的打印机吗 无法绕过打印选项 默认打印机由访问者操作系统决定 使用普通的旧 JavaScript 对此无能为力 使用 Flash 或 Java 或许可以实现这一点 但
  • css/ html 帮助制作像容器一样的圆桌

    任何人都可以提供如何创建基于 css 的气泡容器以便 html 进入其中的见解或示例吗 我想做一张圆桌 也就是说 我希望结果看起来像一张桌子 但边缘是圆角的 如果内部也有轻微的梯度就太好了 我在这个网站上找到了一个样本 http www s
  • 使用R中的geom_smooth()在ggplot2图例中混合填充颜色

    使用绘制两条回归曲线时geom smooth in ggplot2 为了fill颜色 图例选择置信区间相交的颜色 我确实认为当重叠区域按比例大于另一个区域时就会出现这种行为 但是我发现这是非常不受欢迎的 因为读者能够推断出 变暗 区域是 C
  • 有条件地填充 voronoi 段/颜色

    我正在尝试根据 d lon 值有条件地为这些 voronoi 段着色 如果是正数 我希望它是绿色的 如果是负数 我希望它是红色的 然而目前它正在将每个段返回为绿色 即使我将 它仍然返回绿色 活生生的例子在这里 https allaffect
  • Visual Studio 2010 是否支持 Sharepoint 2007 开发?

    我注意到在 VS2010 beta 2 中 所有模板仅适用于 Sharepoint 2010 这是真的 如果是这样 VIeWS 1 3 至少可以与 VS2010 一起使用吗 据我记得在 SharePoint 拉斯维加斯会议上的会议 新的 很
  • 如何在 C# 中使用 itextsharp 创建带有泰米尔字体的 PDF 文件?

    我们正在 C 应用程序中通过传递泰米尔语文本 印度语言之一 来创建 pdf 文件 因此 我已经为我的泰米尔语字体安装了 AVVAIYAR TTF 泰米尔语字体之一 字体 但是当我运行下面提到的命令时pgm 创建的pdf文件不包含任何泰米尔字
  • 第一个承诺完成后,Angular $q.all 被调用

    我试图使用 q all 等待所有承诺都得到解决 但它是在第一个承诺完成后调用的 我做错了什么 function sendAudits audits var promises scope sendAudits progress 0 angul
  • 使用 jquery 将列表拆分为大小相等的子列表的最有效方法

    使用 jQuery 分割列表最有效的方法是什么 ul class columnar li li li li ul 分成几个子列表 ul class column1 li li li li ul ul class column2 li li
  • Java 上的 JSON 与 MultiValueMap

    我想构建一个像这样的 JSON Id 33396 Actions Key 5 Value Test Key 6 Value Test 2 我正在使用 MultiValueMap 这是我的代码 MultiValueMap
  • iOS swift 删除 UITableView 单元格分隔符空间

    我正在尝试删除 tableView 分隔符 我通过将分隔符样式设置为 none 来做到这一点 这会删除分隔符 但会在单元格之间留下空间 我的问题是如何消除单元格之间的空间 任何帮助 将不胜感激 In awakeFromNib功能设定UITa
  • 仅使用 C++ 编写的 Android 应用程序

    是否可以仅使用 C 来制作 Android 应用程序 我不懂Java 我尝试过 Visual Studio 2019 方法 但我想我的计算机不足以模拟 Android 手机 如果您有适当的编程工具 您可以使用 C 为 Android 编写代
  • 尝试通过 jni 调用从 java 更改 Windows 鼠标光标图标

    在我的 java 应用程序中 我尝试使用具有透明度的 argb 32 位 bmp 文件更改鼠标光标 我想进行 jni 调用以从 Windows 更改它 因为在 java 中更改光标会给我一个非常糟糕的鼠标光标 所有透明度都是 0x00 或
  • 为什么无符号类型在arm cpu中效率更高?

    我正在阅读手臂手册并提出这个建议 但没有提到原因 为什么无符号类型更快 在 ARMv4 之前 ARM 没有对加载半字和有符号字节的本机支持 要加载有符号的字节 你必须LDRB然后对值进行符号扩展 LSL那就起来吧ASR它回落 这很痛苦所以c
  • 错误:在 docker 容器中导入 Postgres 数据库

    我正在 docker 容器中运行 ruby on Rails 应用程序 我想在 postgres 容器中创建并恢复数据库转储 但是我 以下是我到目前为止所做的事情 1 添加了 bash 脚本 docker entrypoint initdb