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:
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
4 Réponses :
Vos conteneurs font partie d'un réseau pont pour la résolution DNS automatique, comme vous l'avez défini dans le Essayez ceci: Prochaine exécution trouver l ' 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"
}
}
]
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. docker network inspecter [name] _default pour inspecter le réseau, il imprimera quelque chose comme ceci: networks:
postgres-compose-network:
driver: bridge
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
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
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
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
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
J'ai changé ça, mais concernant mon pgadmin ça reste la même façon de se connecter
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.
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
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