在这个Dockerfile中创buildPostgres用户名/密码在哪里?

所以我按照这个教程: https : //realpython.com/blog/python/django-development-with-docker-compose-and-machine/

我已经把所有东西都运转起来了,但是还有一些事情我不能理解或者理解。

在主要的Docker-Compose中,我们有:

web: restart: always build: ./web expose: - "8000" links: - postgres:postgres - redis:redis volumes: - /usr/src/app - /usr/src/app/static env_file: .env command: /usr/local/bin/gunicorn docker_django.wsgi:application -w 2 -b :8000 postgres: restart: always image: postgres:latest ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data/ 

你会注意到有一个env_file包含:

 DB_NAME=postgres DB_USER=postgres DB_PASS=postgres 

我的问题是什么时候postgres用户和密码被设置? 如果我运行这个docker工具 – 组成一切正常,这意味着Web应用程序可以将凭据传递到postgress数据库并build立连接。 但是,我无法遵循,那些凭据是在哪里设置的。

我假设在基地postgres Dockerfile中,会有一些指令来设置数据库名称,用户名和密码。 我不这样做。 这是下面的基本postgres Dockerfile的副本。

 # vim:set ft=dockerfile: FROM debian:jessie # explicitly set user/group IDs RUN groupadd -r postgres --gid=999 && useradd -r -g postgres --uid=999 postgres # grab gosu for easy step-down from root ENV GOSU_VERSION 1.7 RUN set -x \ && apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \ && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \ && wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \ && export GNUPGHOME="$(mktemp -d)" \ && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \ && chmod +x /usr/local/bin/gosu \ && gosu nobody true \ && apt-get purge -y --auto-remove ca-certificates wget # make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \ && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 ENV LANG en_US.utf8 RUN mkdir /docker-entrypoint-initdb.d RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 ENV PG_MAJOR 9.6 ENV PG_VERSION 9.6.1-1.pgdg80+1 RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main' $PG_MAJOR > /etc/apt/sources.list.d/pgdg.list RUN apt-get update \ && apt-get install -y postgresql-common \ && sed -ri 's/#(create_main_cluster) .*$/\1 = false/' /etc/postgresql-common/createcluster.conf \ && apt-get install -y \ postgresql-$PG_MAJOR=$PG_VERSION \ postgresql-contrib-$PG_MAJOR=$PG_VERSION \ && rm -rf /var/lib/apt/lists/* # make the sample config easier to munge (and "correct by default") RUN mv -v /usr/share/postgresql/$PG_MAJOR/postgresql.conf.sample /usr/share/postgresql/ \ && ln -sv ../postgresql.conf.sample /usr/share/postgresql/$PG_MAJOR/ \ && sed -ri "s!^#?(listen_addresses)\s*=\s*\S+.*!\1 = '*'!" /usr/share/postgresql/postgresql.conf.sample RUN mkdir -p /var/run/postgresql && chown -R postgres /var/run/postgresql ENV PATH /usr/lib/postgresql/$PG_MAJOR/bin:$PATH ENV PGDATA /var/lib/postgresql/data VOLUME /var/lib/postgresql/data COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] EXPOSE 5432 CMD ["postgres"] 

我认为postgres用户和密码正在入口点设置,就像在官方图像入口点23行。

https://github.com/docker-library/postgres/blob/e4942cb0f79b61024963dc0ac196375b26fa60dd/9.6/docker-entrypoint.sh

你能检查你的入口吗?

不知道你使用的是哪个postgres图片。

如果你看官方postgres图像的完整信息。 它允许用户为下面的variables指定环境variables ,这些variables在运行时可以很容易地被覆盖。

  • POSTGRES_PASSWORD
  • POSTGRES_USER
  • PGD​​ATA
  • POSTGRES_DB
  • POSTGRES_INITDB_ARGS

取决于您的情况,可以使用以下三种方法覆盖环境variables。

  • 运行映像:如果直接运行docker映像 ,请使用下面的代码将docker run时的环境variables包含在-e K=V 。 请参阅文档以获取更多细节
 docker run -e POSTGRES_PASSWORD=secrect -e POSTGRES_USER=postgres <other options> image/name 
  • Dockerfile:如果您需要在Dockerfile中指定环境variables, Dockerfile按照下面的说明进行指定。 请参阅文档以获取更多细节
 ENV POSTGRES_PASSWORD=secrect ENV POSTGRES_USER=postgres 
  • docker-compose:如果您需要在docker-compose.yml中指定环境variables,请指定如下。 请参阅文档以获取更多细节
 web: environment: - POSTGRES_PASSWORD=secrect - POSTGRES_USER=postgres 

希望这是有用的。