1
votes

Docker - Compose Je ne peux pas créer de serveur postgres

Bonjour, j'essaye de créer un docker de composition postgres pg admin 4 et node

mais j'ai des difficultés et je ne peux pas créer mon serveur:

entrez la description de l'image ici

J'ai essayé avec tous les noms possibles et je ne sais pas ce que je me trompe:

mon docker compose:

docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
3a20bcd4f105        emasa-web           "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        0.0.0.0:4000->4000/tcp           back-end_web_1
b377e650e772        dpage/pgadmin4      "/entrypoint.sh"         14 minutes ago      Up 14 minutes       443/tcp, 0.0.0.0:16543->80/tcp   back-end_teste-pgadmin-compose_1

DockerFile :

Attaching to back-end_web_1, back-end_emasa-postgres_1, back-end_teste-pgadmin-compose_1
emasa-postgres_1         | The files belonging to this database system will be owned by user "postgres".
emasa-postgres_1         | This user must also own the server process.
emasa-postgres_1         |
emasa-postgres_1         | The database cluster will be initialized with locale "en_US.utf8".
emasa-postgres_1         | The default database encoding has accordingly been set to "UTF8".
emasa-postgres_1         | The default text search configuration will be set to "english".
emasa-postgres_1         |
emasa-postgres_1         | Data page checksums are disabled.
emasa-postgres_1         |
emasa-postgres_1         | fixing permissions on existing directory /var/lib/postgresql/data ... ok
emasa-postgres_1         | creating subdirectories ... ok
emasa-postgres_1         | selecting dynamic shared memory implementation ... posix
emasa-postgres_1         | selecting default max_connections ... 20
emasa-postgres_1         | selecting default shared_buffers ... 400kB
emasa-postgres_1         | selecting default time zone ... Etc/UTC
emasa-postgres_1         | creating configuration files ... ok
emasa-postgres_1         | 2020-03-17 23:48:08.890 UTC [81] FATAL:  data directory "/var/lib/postgresql/data" has wrong ownership
emasa-postgres_1         | 2020-03-17 23:48:08.890 UTC [81] HINT:  The server must be started by the user that owns the data directory.
emasa-postgres_1         | child process exited with exit code 1
emasa-postgres_1         | initdb: removing contents of data directory "/var/lib/postgresql/data"
emasa-postgres_1         | running bootstrap script ... web_1                    | Error: getaddrinfo ENOTFOUND db

ma configuration orm:

{
  "type": "postgres",
  "host": "db",
  "port": 5432,
  "username": "postgres",
  "password": "emasa@",
  "database": "postgres",
  "synchronize": true,
  "logging": false,
  "entities": ["src/entity/**/*.ts"],
  "migrations": ["src/migration/**/*.ts"],
  "subscribers": ["src/subscriber/**/*.ts"],
  "cli": {
    "entitiesDir": "src/entity",
    "migrationsDir": "src/migration",
    "subscribersDir": "src/subscriber"
  }
}

mes loggers docker-compose: p>

FROM node as builder
WORKDIR usr/app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build


FROM node
WORKDIR usr/app
COPY package*.json ./
RUN npm install --production

COPY --from=builder /usr/app/dist ./dist

COPY ormconfig.docker.json ./ormconfig.json
COPY .env . 

expose 4000
CMD node dist/src/index.js

mon conteneur ls:

version: "3.7"
services:
  emasa-postgres:
    image: postgres
    environment:
      POSTGRES_PASSWORD: emasa@
      POSTGRES_USER: postgres
      POSTGRES_DB: emasa
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - postgres-compose-network
  web:
    image: emasa-web
    depends_on:
      - emasa-postgres
    ports:
      - "4000:4000"
    networks:
      - postgres-compose-network
  teste-pgadmin-compose:
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: "emasa@hotmail.com"
      PGADMIN_DEFAULT_PASSWORD: "emasa"
    ports:
      - "16543:80"
    depends_on:
      - emasa-postgres
    networks:
      - postgres-compose-network

networks:
  postgres-compose-network:
    driver: bridge

[! [entrez la description de l'image ici] [2]] [2] p >

J'ai vraiment essayé avec les noms de conteneurs:

emasa-postgres_1 emasa-postgres

et en vain


7 commentaires

Qu'est-ce qui ne va pas? y a-t-il un message d'erreur réel que vous recevez? Pouvez-vous réduire le code au minimum nécessaire pour illustrer le problème? docker container ls écrit généralement une sortie texte, pas un fichier PNG; pouvez-vous remplacer l'image par la sortie réelle de la commande?


@David Maze Bonjour, je reçois une réponse d'erreur sur mon pgadmin4 J'ai posté les enregistreurs sur mon postgress et il semble normal que je remplace l'image


est pgadmin mais vous rencontrez juste un problème pour vous connecter au serveur?


@WaLid LamRaoui ouais j'entre sur le web pgAdmin mais je ne peux pas créer la connexion


Je ne sais pas que ma composition est "correcte"


utilisez-vous hostname: localhost et user: postgres et password: emasa @?


ouais j'essaye avec le nom du conteneur localhost / docker et d'autres


4 Réponses :


1
votes

Vos conteneurs font partie d'un réseau pont pour la résolution DNS automatique, comme vous l'avez défini dans le docker-compose.yml et utilisez postgres-compose-network que vous avez défini comme un pont

[
{
    "Name": "dockerizing_default",
    "Id": "98f8a8ef5153fbe91acc28ed0688179f75e08b321b72aab0abe7bf57e1880cc8",
    "Created": "2020-03-07T14:13:49.446907044+01:00",
    "Scope": "local",
    "Driver": "bridge",
    "EnableIPv6": false,
    "IPAM": {
        "Driver": "default",
        "Options": null,
        "Config": [
            {
                "Subnet": "172.18.0.0/16",
                "Gateway": "172.18.0.1"
            }
        ]
    },
    "Internal": false,
    "Attachable": true,
    "Ingress": false,
    "ConfigFrom": {
        "Network": ""
    },
    "ConfigOnly": false,
    "Containers": {},
    "Options": {},
    "Labels": {
        "com.docker.compose.network": "default",
        "com.docker.compose.project": "dockerizing",
        "com.docker.compose.version": "1.25.4"
    }
}
]

Essayez ceci:

  1. Exécutez docker network ls pour connaître les réseaux créés dans votre environnement d’exécution docker, tous les réseaux seront répertoriés dans la console, vous trouverez un [nom] _default quelque chose comme name-of-project-directory_default cela devrait être votre réseau.
  2. Prochaine exécution docker network inspecter [name] _default pour inspecter le réseau, il imprimera quelque chose comme ceci:

    networks:
      postgres-compose-network:
        driver: bridge
    
  3. trouver l ' IPv4Address , vous devriez utiliser cette adresse IP au lieu de localhost , cela pourrait être 172.18. 0,2 J'espère que cela résoudra le problème


3 commentaires

J'essaie avec ceci et j'ai ceci: Impossible de se connecter au serveur: impossible de se connecter au serveur: Connexion refusée Le serveur fonctionne-t-il sur l'hôte "172.22.0.3" et accepte les connexions TCP / IP sur le port 5432?


Même lors de l'utilisation du pilote "bridge", les ports EXPOSE d sont toujours mappés sur l'hôte. localhost fonctionnera toujours (sauf si vous exécutez Docker dans une VM), mais lorsque vous utilisez un pilote de pont, le port peut en plus être disponible en externe


ouais peut-être que c'est bcoz que vous définissez la base de données sur POSTGRES_DB: emasa dans docker-compose.yaml mais vous utilisez postgres sur l'interface Web de pgadmin soit mettre à jour docker compose pour utiliser postgres ou utiliser emasa comme nom de db lors de la connexion: comme hôte 172.22.0.3, mot de passe amasa @, db emasa



0
votes

Le nom d'hôte de l'essai est 127.0.0.1:4532 . Assurez-vous également que le conteneur postgres utilise docker ps

MISE À JOUR: Cela devrait être travaillé

volumes:
      - ./pgdata:/var/lib/postgresql/data/pgdata
ports:
    - "5432:5432"
environment:
    PGDATA: /var/lib/postgresql/data/pgdata


1 commentaires

J'essaye ceci mais ne fonctionne pas et essaye le ps de docker et ai: CONTENEUR ID IMAGE COMMAND CRÉÉ STATUS PORTS NOMS 30fb3ec688dd emasa-web "docker-entrypoint.s…" Il y a environ une minute Up Environ une minute 0.0.0.0:4000->4000/ tcp back-end_web_1 87bd9318c4c9 dpage / pgadmin4 "/entrypoint.sh" Il y a environ une minute En haut Environ une minute 443 / tcp, 0.0.0.0:16543->80/tcp back-end_teste-pgadmin-compose_1



0
votes

ce n'est pas db, changez cet "hôte": "db"

À ceci

"hôte": "emasa-postgres"

emasa-postgres est le nom que vous utilisez à la place de l'adresse IP pour la connexion entre les services

Modifiez cela dans votre configuration orm


1 commentaires

J'ai changé ça, mais concernant mon pgadmin ça reste la même façon de se connecter



1
votes

La cause du problème peut être vue dans le journal que vous avez fourni.

17/03/2020 23: 48: 08.890 UTC [81] FATAL: le répertoire de données "/ var / lib / postgresql / data" n'a pas la bonne propriété

Vous exécutez probablement le docker sur une machine Windows? Si tel est le cas, cela semble être un bogue courant - vérifiez ici . Donc, vous voudrez peut-être utiliser un volume docker persistant à la place, à la

services:
    teste-pgadmin-compose:
        image: dpage/pgadmin4
        links:
            - "emasa-postgres:my_super_cool_postgres"

J'ai encore des doutes sur ma composition de l'hôte local à utiliser dans pgadmin

Pour vous connecter à votre emasa-postgres à partir de pgadmin , vous pouvez définir le nom d'hôte et l'alias réseau pour emasa-postgres comme ceci:

services:
    emasa-postgres:
        hostname: my_super_cool_postgres
        image: postgres
        networks:
            postgres-compose-network:
                aliases:
                    - my_super_cool_postgres

Au lieu d'utiliser localhost ou db , vous devriez alors pouvoir vous connecter à la base de données via l'hôte my_super_cool_postgres.

De cette façon, vous devriez pouvoir vous connecter à votre conteneur postgres depuis pgadmin. Si cela ne fonctionne toujours pas pour vous, vous pouvez également essayer d'utiliser les liens a> à la place, qui est une fonctionnalité héritée de Docker, mais qui devrait fonctionner, par exemple

services:
  emasa-postgres:
    ...
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
    - postgres-compose-network

volumes:
  pgdata:

Cette fois, vous devez le définir pour teste-pgadmin-compose (ou depuis l’endroit où vous avez besoin d’accéder au conteneur emasa-postgres ). L'hôte my_super_cool_postgres et le port 5432 devraient alors être accessibles.


1 commentaires

Cela semble résoudre, le msg d'erreur du journal a disparu, mais j'ai toujours des doutes sur ma composition de l'hôte local à utiliser dans pgadmin