¿Cómo usar el volumen en el docker para networkingactar postgres?

Aquí está la image que estoy usando.

Lo posgres_test

Si ejecuto la image individualmente

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

Puedo acceder a ella con

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

O puedo acceder a él con mi aplicación golang

 // 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) 

Sin embargo, si uso 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: {} 

Obtengo lo siguiente

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

Sé con security que test_db existe en test_volume desde

 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 

mostrará la tabla que creé

Pero parece que mi aplicación en Docker no puede encontrarla

¿Alguien me puede ayudar?

Acerca de su file docker-compose

  1. En primer lugar, pensé que era porque no usaba la opción 'enlaces' para vincular su contenedor postgres al contenedor web; es una buena práctica si no expande puertos, pero expande el puerto postgres.

  2. Si desea utilizar la inheritance de la image que publicó en lugar de usar esta línea:

my_image / postgresql: 9.3

utilizar:

 docker/postgres 

y crea la ruta docker / postgres y allí coloca Dockerfile con inharitance del contenedor que desees.

  1. Siempre utilizo los volúmenes para compartir en docker-compose.yml de esta manera:

    .:/var/www/html

donde . es la ruta de mi proyecto donde coloco mis files de código.

Imagen que creé para probar este caso

No tengo la estructura de files de todos los acopladores para reproducir este error y corregirlo, por lo que creé docker-compose, que debería coincidir con sus necesidades o ayudar a solucionar su problema:

 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 

Notas:

  1. Recomendaré usar la image oficial de postgres

  2. Dejé comentarios al lado de las líneas.

Cómo hice la connection:

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

Debido a que mi contenedor web conoce el host dbpostgres (nombre de image y nombre de dominio) ahora, los vinculo usando enlaces.

Si necesita una database del contenedor existente

Si necesita una database desde su contenedor existente, solo use la opción docker cp para copyr la database localmente:

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

donde /private/var/lib/postgresql es la ruta en su server local. También necesita cambiar las cnetworkingenciales a db en Docker-compose a sus cnetworkingenciales anteriores. Tienes que hacerlo antes de ejecutar docker-compose porque si db no existe, se creará.

Cualquier pregunta, házmelo saber.

Si el volumen es externo y ya existe antes del uso de docker-compose, debe declararlo como externo, o si no, docker compose creará un nuevo volumen con el nombre del proyecto como prefijo.

 volumes: test_volume: external: true 

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

Creo que debería ser algo como esto para ti.

 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 

Lea los documentos de Docker ( https://docs.docker.com/engine/tutorials/dockervolumes/ ), mire tutoriales (hay un canal Docker de Youtube con excelentes tutoriales) y lea otros temas antes de publicar uno nuevo …