postgresql - 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 初始化脚本没有运行。我在网上看到了很多选择,我已经尝试了所有方法,但我仍然面临同样的错误。
任何帮助表示赞赏
谢谢
解决方案
从postgres docker 映像文档中,您可以看到POSTGRES_USER
和POSTGRES_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
...