首页 > 解决方案 > Postgres 初始化脚本不起作用 Docker 版本 3.4

问题描述

尝试对应用程序进行 dockerize 处理,在我的应用程序中,我有以下内容

码头工人-compose.yml

version: '3.4'

services:
  app: 
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - database
    ports: 
      - "3000:3000"
    volumes:
      - .:/app
      - gem_cache:/usr/local/bundle/gems
    env_file: .env
    environment:
      RAILS_ENV: development

  database:
    image: postgres:10.12
    volumes:
      - ./init.sql/:/docker-entrypoint-initdb.d/init.sql
      - db_data:/var/lib/postgresql/data

volumes:
  gem_cache:
  db_data:

在我的 init.sql 文件中

CREATE USER user1 WITH PASSWORD 'password';
ALTER USER user1 WITH SUPERUSER;

我已经跑了chmod +x init.sql

在我的 .env 文件中,我有以下内容

DATABASE_NAME=tools_development
DATABASE_USER=user1
DATABASE_PASSWORD=password
DATABASE_HOST=database

这是我的 Dockerfile

FROM ruby:2.7.0

ENV BUNDLER_VERSION=2.1.4

RUN apt-get -y update --fix-missing


RUN apt-get install -y bash git build-essential nodejs libxml2-dev openssh-server libssl-dev libreadline-dev zlib1g-dev postgresql-client libcurl4-openssl-dev libxml2-dev libpq-dev tzdata

RUN gem install bundler -v 2.1.4

WORKDIR /app

COPY Gemfile Gemfile.lock ./

RUN bundle check || bundle install 

COPY . ./ 

ENTRYPOINT ["./entrypoint.sh"]

但是每次我运行docker-compose run --build并尝试运行我的应用程序时。我得到错误:

could not translate host name "database" to address: Name or service not known

我已经尝试了所有可能的方法,但仍然是同样的错误。

有谁知道如何解决这个问题?

我知道问题正在发生,因为 postgres 初始化脚本没有运行。我在网上看到了很多选择,我已经尝试了所有方法,但我仍然面临同样的错误。

任何帮助表示赞赏

谢谢

标签: postgresqldockerdocker-composedockerfile

解决方案


postgres docker 映像文档中,您可以看到POSTGRES_USERPOSTGRES_PASSWORD是设置 postgres 容器所必需的环境变量

您可以将这些环境变量添加到您的.env文件中。所以文件将如下所示:

.env

DATABASE_NAME=tools_development
DATABASE_USER=user1
DATABASE_PASSWORD=password
DATABASE_HOST=database

POSTGRES_USER=user1
POSTGRES_PASSWORD=password
POSTGRES_DB=tools_development

这些环境变量将从 postgres 容器中用于初始化数据库并分配用户,因此您可以摆脱init.sql文件

之后,您需要.env在数据库(postgres:10.12)服务中添加文件的引用。
所以你的 docker compose 文件应该如下:

码头工人-compose.yml

...
  database:
    image: postgres:10.12
    volumes:
      - db_data:/var/lib/postgresql/data
    env_file: .env 
...

推荐阅读