Wo ist der Postgres-Benutzername/ – Passwort erstellt werden, das Dockerfile?

So war ich nach diesem tutorial:
https://realpython.com/blog/python/django-development-with-docker-compose-and-machine/

Habe ich alles eingerichtet und läuft, aber es gibt ein paar Dinge, die ich bin nicht in der Lage zu Folgen oder verstehen.

In der main-Andockfenster-Compose wir:

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/

Werden Sie feststellen, es ist ein env_file mit:

DB_NAME=postgres    
DB_USER=postgres    
DB_PASS=postgres

Meine Frage ist, wenn der postgres-Benutzer und Passwort gesetzt? Wenn ich dieses Andockfenster-Komponieren funktioniert alles, also die web-app kann die übergabe von Anmeldeinformationen für die postgress Datenbank und eine Verbindung herzustellen. Ich bin nicht in der Lage zu Folgen, jedoch, wo diese Anmeldeinformationen werden in den ersten Platz.

Ich war der Annahme, in der Basis postgres Dockerfile, es wäre eine Anleitung zum einrichten des Datenbank-name, Benutzername und Passwort. Ich Tue es nicht obwohl. Hier ist eine Kopie der Basis postgres Dockerfile unten.

# 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"]
InformationsquelleAutor david | 2016-11-14



2 Replies
  1. 3

    Ich denke, dass die postgres-Benutzer und Passwort wird gesetzt auf entrypoint, wie in Zeile 23 auf offizielle Bild entrypoint.

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

    Können Sie überprüfen Sie Ihre entrypoint?

    • Ich bin mit der offiziellen postgres-image, so dass ich glaube, Sie haben meine Frage beantwortet. Also in diesem docker-entrypoint.sh, was ist der Benutzername und das Passwort gesetzt? Ich Frage, weil ich bin nicht gut im Lesen von bash-Skript.
  2. 2

    Nicht sicher sind, welche postgres Bild sind Sie mit.

    Wenn man sich die offizielle postgres-Bild für vollständige Informationen. Es ermöglicht dem Benutzer festzulegen, die Umgebungsvariablen für die unten diejenigen-und diese können leicht überschrieben zur Laufzeit.

    • POSTGRES_PASSWORD
    • POSTGRES_USER
    • PGDATA
    • POSTGRES_DB
    • POSTGRES_INITDB_ARGS

    Environment-Variablen können überschrieben werden, mithilfe der folgenden drei Methoden, je nach Ihrem Fall.

    • Laufen Bild: Wenn laufen docker-image direkt, verwenden Sie unten, um include-Umgebungsvariable in docker run mit -e K=V. Entnehmen Sie bitte der Dokumentation für mehr details hier
    docker run -e POSTGRES_PASSWORD=secrect -e POSTGRES_USER=postgres <other options> image/name
    • Dockerfile: Wenn Sie brauchen, um geben Sie die Umgebungsvariable in Dockerfile geben Sie, wie unten erwähnt. Entnehmen Sie bitte der Dokumentation für mehr details hier
    ENV POSTGRES_PASSWORD=secrect
    ENV POSTGRES_USER=postgres
    • docker-compose: Wenn Sie brauchen, um geben Sie die Umgebungsvariable in docker-compose.yml geben Sie, wie unten beschrieben. Entnehmen Sie bitte der Dokumentation für mehr details hier
    web:
      environment:
        - POSTGRES_PASSWORD=secrect
        - POSTGRES_USER=postgres

    Hoffe, dass dies nützlich ist.

    • Diese haben nicht wirklich geholfen, Nein. Ich werde versuchen, zu aktualisieren, mein original-Beitrag im detail.
    • Können Sie näher erläutern, was hast du versucht und was hat nicht funktioniert? Angegeben, alle Optionen und Sie können wählen, die auf Sie anwendbar.
    • Meine Frage ist, wo in meinem Beispiel werden Anmeldeinformationen festgelegt. Ich habe eine env-Datei, aber diese Umgebungsvariablen sind für meinen Django-Projekt, um die Verbindung zu postgres mit.
    • Ist service web benötigt, um eine Verbindung herzustellen? dann definieren Sie es, wie gezeigt, in der docker-compose.yml
    • Es ist schon irgendwo definiert, als wenn ich laufen docker compose, es feuert eine web-app und django Anschluss an die db.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.