在这个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行。
你能检查你的入口吗?
不知道你使用的是哪个postgres图片。
如果你看官方postgres图像的完整信息。 它允许用户为下面的variables指定环境variables ,这些variables在运行时可以很容易地被覆盖。
- POSTGRES_PASSWORD
- POSTGRES_USER
- PGDATA
- 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
希望这是有用的。