2017-02-08 10 views
20

Oto numer image, którego używam.Jak używać woluminu w dokowaniu komponować dla postgreS?

Nazwałam go posgres_test

Jeśli uruchomić obraz indywidualnie

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

mogę do niego dostęp z

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

Albo mogę do niego dostęp z moim golang aplikacji

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

Jednak jeśli używam 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: {} 

uzyskać następujące

[email protected] ERROR: relation "test_db" does not exist at character 15 

wiem na pewno test_db istnieć w test_volume od

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 

pokaże tabela I utworzono

Ale wydaje się, że moja aplikacja w Döcker komponować nie mogę go znaleźć

Czy ktoś może mi pomóc?

Odpowiedz

0

Myślę, że to coś takiego dla ciebie.

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 

Czytaj dokowane Docs (https://docs.docker.com/engine/tutorials/dockervolumes/), oglądać tutoriale (jest kanał Youtube dokowanym pokojowe świetnych tutoriali) i inne tematy przeczytać przed wysłaniem nowego ...

+0

jestem już w stanie uzyskać dostęp do głośności, gdy biegnę pojemnik Döcker indywidualnie (np 'dokowanym uruchomić -i -t -v =" test_volume.:/Var/lib/postgresql "-p 5432: 5432 posgres_test") problem pojawia się, gdy używam dockera komponować – Kevin

+0

Nieważne, nie zdałem sobie z tego sprawy wczoraj ^^ ' Ale widziałem, że w twoim poście twój docker-compose.yml nie ma 'wersji:' x "do niego, i jeśli dobrze pamiętam, domyślnie docker-compose przyjmij wersję 1 w tym przypadku, a konfiguracja woluminu nie działa ... Spróbuj wstawić' version: '2''. Mam nadzieję, że zadziała :) –

+0

Niestety, dodanie 'version:" 2 "' nie działa. – Kevin

7

O pliku Döcker-compose

  1. Najpierw myślałem, że to dlatego, że „linki” opcja połączyć pojemnik postgres'owy do pojemnika internetowej nie używać - to dobra praktyka, jeśli nie rozwijać porty - ale poszerzyć portu postgres'owy.

  2. Jeśli chcesz użyć dziedziczenia od obrazu, który pisał Zamiast tego wiersza:

my_image/PostgreSQL: 9,3

zastosowanie:

docker/postgres 

i utwórz ścieżkę dokowania/postgres i tam umieść Dock erfile z inwazją z pojemnika, który chcesz.

  1. Zawsze używam woluminów udostępniania w funkcji dokowania.yml tak:

    .:/var/www/html

gdzie . jest moja droga, gdzie umieścić moje pliki kod projektu.

Obraz stworzyłem przetestować tę sprawę

nie mam swoją strukturę wszystkie pliki dokowane aby odtworzyć ten błąd i go naprawić, więc stworzyłem Döcker-Compose, który powinien pasować do Twoich potrzeb lub pomóc naprawić Twój problem:

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 

Uwagi:

  1. polecam stosowanie oficjalnych postgres'owy obraz

  2. Zostawiłem komentarze obok wierszy.

Jak zrobiłem połączenie:

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

Ponieważ mój pojemnik internetowej wiedzieć dbpostgres hosta (nazwa obrazu i nazwa domeny) obecnie - połączyć je za pomocą linki.

Jeśli potrzebujesz bazy danych z istniejącego kontenera

Jeśli potrzebujesz bazy danych z istniejącego kontenera wystarczy użyć opcji Döcker cp skopiować bazę danych lokalnie:

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

gdzie /private/var/lib/postgresql jest ścieżka na localhost. Potrzebne są również zmiany poświadczeń do bazy danych w oknie dokowanym do starych poświadczeń. Musisz to zrobić przed uruchomieniem dokowania-tworzenia, ponieważ jeśli db nie istnieje, zostanie utworzona skrzynka.

Wszelkie pytania, daj mi znać.

1

Jeśli wolumin jest zewnętrzny i już istnieje przed użyciem funkcji dokowania, należy zadeklarować go na zewnątrz, w przeciwnym razie tworzenie dokowania spowoduje utworzenie nowego woluminu z nazwą projektu jako prefiksem.

volumes: 
    test_volume: 
    external: true 

Źródło: https://docs.docker.com/compose/compose-file/#external

Powiązane problemy