Gitpod中Docker部署PostgreSQL出现密码认证失败问题求助
Gitpod Docker容器中PostgreSQL用户创建与认证问题
我在Gitpod中通过Docker构建容器(无法直接访问Docker命令行),目标是安装Python和PostgreSQL,当前使用的Dockerfile内容如下:
# Base image is one of Python official distributions. FROM python:3.8.13-slim-buster # Update libraries and install sudo. RUN apt update RUN apt -y install sudo # Install curl. RUN sudo apt install -y curl # Install git. RUN sudo apt install install-info RUN sudo apt install -y git-all # Install nodejs. RUN curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - RUN sudo apt install -y nodejs # Download Google Cloud CLI installation script. RUN mkdir -p /tmp/google-cloud-download RUN curl -sSL https://sdk.cloud.google.com > /tmp/google-cloud-download/install.sh # Install Google Cloud CLI. RUN mkdir -p /gcloud RUN bash /tmp/google-cloud-download/install.sh --install-dir=/gcloud --disable-prompts # Copy local code to the container image. ENV APP_HOME /app WORKDIR $APP_HOME COPY . ./ # Install production dependencies. RUN pip install --no-cache-dir -r requirements.txt # Set some variables and create gitpod user. ENV PGWORKSPACE="/workspace/.pgsql" ENV PGDATA="$PGWORKSPACE/data" RUN sudo mkdir -p $PGDATA RUN useradd -l -u 33333 -G sudo -md /home/gitpod -s /bin/bash -p gitpod gitpod RUN sudo chown gitpod $PGWORKSPACE -R # Declare Django env variables. ENV DJANGO_DEBUG=True ENV DJANGO_DB_ENGINE=django.db.backends.postgresql_psycopg2 # Declare Postgres env variables. Note that these variables # cannot be renamed since they are used by Postgres. # https://www.postgresql.org/docs/current/libpq-envars.html ENV PGDATABASE=postgres ENV PGUSER=gitpod ENV PGPASSWORD=gitpod ENV PGHOST=localhost ENV PGPORT=5432 # Install PostgreSQL 14. Note that this block needs to be located # after the env variables are specified, since it uses POSTGRES_DB, # POSTGRES_USER and POSTGRES_PASSWORD to create the first user. RUN curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg RUN sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' RUN sudo apt -y update RUN sudo apt -y install postgresql-14 USER gitpod # Set some more variables and init the db. ENV PATH="/usr/lib/postgresql/14/bin:$PATH" RUN mkdir -p ~/.pg_ctl/bin ~/.pg_ctl/sockets RUN initdb -D $PGDATA RUN printf '#!/bin/bash\npg_ctl -D $PGDATA -l ~/.pg_ctl/log -o "-k ~/.pg_ctl/sockets" start\n' > ~/.pg_ctl/bin/pg_start RUN printf '#!/bin/bash\npg_ctl -D $PGDATA -l ~/.pg_ctl/log -o "-k ~/.pg_ctl/sockets" stop\n' > ~/.pg_ctl/bin/pg_stop RUN chmod +x ~/.pg_ctl/bin/* ENV PATH="$HOME/.pg_ctl/bin:$PATH" ENV DATABASE_URL="postgresql://gitpod@localhost" ENV PGHOSTADDR="127.0.0.1"
我预期容器中会存在名为postgres的数据库,以及与bash默认用户同名的gitpod默认用户,但执行psql -h localhost时收到如下错误:
psql: error: connection to server at "127.0.0.1", port 5432 failed: FATAL: password authentication failed for user "gitpod" connection to server at "127.0.0.1", port 5432 failed: FATAL: password authentication failed for user "gitpod"
我怀疑gitpod用户并未实际创建,因为使用任意随机字符串作为用户名登录时也会收到相同提示。
我尝试了以下操作,但均未解决问题:
echo "host all all 127.0.0.1/32 trust" | sudo tee -a /etc/postgresql/14/main/pg_hba.confecho "host all all localhost trust" | sudo tee -a /etc/postgresql/14/main/pg_hba.conf
执行sudo -u gitpod psql postgres时返回错误(已翻译为中文):
psql: 错误:无法连接到套接字 "/var/run/postgresql/.s.PGSQL.5432" 上的服务器:FATAL:角色 "gitpod" 不存在
内容的提问来源于stack exchange,提问作者Edgar Derby
相关产品推荐
相关产品推荐

