33 votes

Comment utiliser le volume dans le menu fixe composer pour postgres?

Voici l' image que j'utilise.

Je l'ai appelé, il posgres_test

Si je lance l'image individuellement

docker run -i -t -v="test_volume:/var/lib/postgresql" -p 5432:5432 posgres_test

Je peux y accéder avec

psql -h 192.168.99.100 -p 5432 -U pguser -W pgdb

Ou je peux y accéder avec mon golang app

// host is set to postgres
db, err := sql.Open("postgres", "postgres://pguser:pguser@postgres:5432/pgdb")
// table test_db is manually created.
rows, err := db.Query("SELECT name FROM test_db WHERE)

Cependant, si j'utilise docker compose

docker-compose.yml

version: "2"
services:
  postgres:
    image: my_image/postgresql:9.3
    volumes:
      - test_volume:/var/lib/postgresql
    ports:
      - "5432:5432"
  web:
    image: my-golang-app4
    ports:
      - "8080:8080"
volumes:
  test_volume: {}

J'ai le

pguser@pgdb ERROR:  relation "test_db" does not exist at character 15

Je sais pour sûr, test_db existent en test_volume depuis

docker run -i -t -v="test_volume:/var/lib/postgresql" -p 5432:5432 posgres_test
psql -h 192.168.99.100 -p 5432 -U pguser -W pgdb

\dt

va montrer le tableau que j'ai créé

Mais il semble que mon application dans le panneau de composer ne peut pas le trouver

Quelqu'un peut-il m'aider?

20voto

Arkowsky Points 441

À propos de votre menu fixe-composition de fichier

  1. Tout d'abord j'ai pensé que c'est parce que vous n'utilisez pas de 'liens' option pour associer votre postgres conteneur conteneur web - c'est une bonne pratique si vous ne développez ports - mais vous développez postgres port.

  2. Si vous voulez utiliser l'héritage de l'image que vous avez posté Au lieu d'utiliser cette ligne:

my_image/postgresql:9.3

utilisation:

docker/postgres

et de créer le chemin d'accès menu fixe/postgres et il y a lieu Dockerfile avec inharitance de conteneur que vous souhaitez.

  1. J'ai toujours utiliser le partage de volumes dans le menu fixe-composer.yml comme ceci:

    .:/var/www/html

. mon projet est le chemin où je place mes fichiers de code.

L'Image que j'ai créé pour tester ce cas

Je n'ai pas votre tous docker structure des fichiers à reproduire cette erreur et la corriger, j'ai donc créé docker-composer qui doit correspondre à vos besoins ou vous aider à résoudre votre problème:

version: '2'
services:
  web:
    build: docker/web
    ports:
      - "8080:8080"
    links:
      - dbpostgres 
    volumes:
      - .:/var/www/html   # I will share my code so I map this path
  dbpostgres:
    image: postgres
    volumes:
      - /private/var/lib/postgresql:/var/lib/postgresql
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: pguser
      POSTGRES_PASSWORD: pguser
      POSTGRES_DB: pgdb

Notes:

  1. Je vous recommande l'utilisation officielle postgres image

  2. J'ai laissé des commentaires à côté des lignes.

Comment j'ai fait la connexion:

host=dbpostgres port=5432 dbname=pgdb user=pguser password=pguser

Parce que mon conteneur web savoir hôte dbpostgres(nom de l'image et de nom de domaine) - je les relier entre elles par des liens.

Si vous avez besoin de la base de données de conteneur existant

Si vous avez besoin de la base de données à partir de votre conteneur existant suffit d'utiliser l'option de menu fixe cp pour copier la base de données en local:

docker cp posgres_test:/var/lib/postgresql /private/var/lib/postgresql

/private/var/lib/postgresql est le chemin d'accès sur votre localhost. Vous devez également modifier les informations d'identification de db dans le menu fixe-composer vos informations d'identification. Vous devez le faire avant de lancer docker-composer parce que si la db n'existe pas, va être emballé.

Des questions, laissez-moi savoir.

5voto

gprivitera Points 578

Si le volume est externe et déjà existant avant l'utilisation de docker-composer vous devez déclarer externe, ou d'autre docker composer permettra de créer un nouveau volume avec le nom du projet comme préfixe.

volumes:
  test_volume:
   external: true

Source: https://docs.docker.com/compose/compose-file/#external

0voto

Thibault Loison Points 174

Je pense qu'il doit être quelque chose comme ça pour vous.

docker run -itd -p 5432:5432 --name postgres_test -v /path/in/your/host :/path/in/your/container postgres_test psql -h 192.168.99.100 -p 5432 -U pguser -W pgdb

Lire Docker docs(https://docs.docker.com/engine/tutorials/dockervolumes/), regarder des tutoriels (il y a un menu fixe chaîne Youtube avec des didacticiels) et de lire les autres sujets avant de poster un nouveau...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X