Aquí está laimagen que estoy usando.
Lo nombré posgres_test
Si ejecuto la imagen individualmente
docker run -i -t -v="test_volume:/var/lib/postgresql" -p 5432:5432 posgres_testPuedo acceder con
psql -h 192.168.99.100 -p 5432 -U pguser -W pgdbO 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: {}me sale lo siguiente
pguser@pgdb ERROR: relation "test_db" does not exist at character 15 Sé con certeza 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 \dtmostrará la tabla que creé
Pero parece que mi aplicación en docker compose no puede encontrarla
¿Alguien me puede ayudar?
Acerca de su archivo docker-compose
En primer lugar, pensé que se debía a que no usa la opción 'enlaces' para vincular su contenedor de postgres al contenedor web; es una buena práctica si no expande los puertos, pero expande el puerto de postgres.
Si desea usar la herencia de la imagen que publicó en lugar de usar esta línea:
mi_imagen/postgresql:9.3
usar:
docker/postgresy cree la ruta docker/postgres y allí coloque Dockerfile con la herencia del contenedor que desee.
Siempre uso compartir volúmenes en docker-compose.yml así:
.:/var/www/html
. es la ruta de mi proyecto donde coloco mis archivos de código.
Imagen que creé para probar este caso
No tengo la estructura de todos los archivos de la ventana acoplable para reproducir este error y solucionarlo, así que creé docker-compose que debería satisfacer 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: pgdbNotas:
Recomendaré usar la imagen oficial de postgres.
Dejé comentarios al lado de las líneas.
Cómo hice la conexión:
host=dbpostgres port=5432 dbname=pgdb user=pguser password=pguserDebido a que mi contenedor web ahora conoce host dbpostgres (nombre de imagen y nombre de dominio), los vinculo mediante enlaces.
Si necesita una base de datos de un contenedor existente
Si necesita una base de datos de su contenedor existente, simplemente use la opción docker cp para copiar la base de datos localmente:
docker cp posgres_test:/var/lib/postgresql /private/var/lib/postgresql donde /private/var/lib/postgresql es la ruta en su servidor local. También necesita cambiar las credenciales a db en docker-compose a sus credenciales anteriores. Debe hacerlo antes de ejecutar docker-compose porque si db no existe, se creará.
Cualquier pregunta, hágamelo saber.
Si el volumen es externo y ya existía antes del uso de docker-compose, debe declararlo externo o, de lo contrario, docker compose creará un nuevo volumen con el nombre del proyecto como prefijo.
volumes: test_volume: external: true Documentos para uso external de compose v3 (en su mayoría similares a v2 ): https://docs.docker.com/compose/compose-file/compose-file-v3/#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 pgdbLea documentos de Docker ( https://docs.docker.com/engine/tutorials/dockervolumes/ ), vea tutoriales (hay un canal de Youtube de Docker con excelentes tutoriales).