これが image を使用しています。
posgres_test
という名前を付けました
画像を個別に実行する場合
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
または、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)
ただし、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: {}
私は次のようになります
pguser@pgdb ERROR: relation "test_db" does not exist at character 15
test_db
がtest_volume
に存在することは確かです
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
作成したテーブルが表示されます
しかし、Docker Composeの私のアプリはそれを見つけることができないようです
誰か助けてくれますか?
docker-composeファイルについて
まず、「リンク」オプションを使用してpostgresコンテナーをWebコンテナーにリンクしないためだと考えました-ポートを展開しないのが良い習慣ですが、postgresポートを展開します。
この行を使用する代わりに、投稿した画像からの継承を使用する場合:
my_image/postgresql:9.3
つかいます:
docker/postgres
パスdocker/postgresを作成し、必要なコンテナからの不利益を伴うDockerfileを配置します。
私は常にdocker-compose.ymlの共有ボリュームを次のように使用します:
.:/var/www/html
どこ .
は、コードファイルを配置するプロジェクトパスです。
このケースをテストするために作成した画像
このエラーを再現して修正するためのすべてのdockerファイル構造はありません。そのため、ニーズに合った、または問題の修正に役立つdocker-composeを作成しました。
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
ノート:
公式のpostgresイメージを使用することをお勧めします
行の横にコメントを残しました。
接続方法:
Host=dbpostgres port=5432 dbname=pgdb user=pguser password=pguser
私のWebコンテナはHost dbpostgres(イメージ名とドメイン名)を知っているため、リンクを使用してリンクします。
既存のコンテナのデータベースが必要な場合
既存のコンテナのデータベースが必要な場合は、オプションdocker cpを使用してデータベースのローカルをコピーします。
docker cp posgres_test:/var/lib/postgresql /private/var/lib/postgresql
どこ /private/var/lib/postgresql
はローカルホストのパスです。また、docker-composeで資格情報を古い資格情報のdbに変更する必要があります。 dbが存在しない場合はクレートされるため、docker-composeを実行する前に実行する必要があります。
ご質問、ご連絡ください。
ボリュームが外部であり、docker-composeを使用する前に既に存在している場合は、外部で宣言する必要があります。そうでない場合、docker composeはプレフィックスとしてプロジェクト名を使用して新しいボリュームを作成します。
volumes:
test_volume:
external: true
あなたにとってこのようなものになると思います。
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
Dockerのドキュメントを読んで( https://docs.docker.com/engine/tutorials/dockervolumes/ )、チュートリアルを見る(Docker Youtubeチャンネルには素晴らしいチュートリアルがあります)、新しいトピックを投稿する前に他のトピックを読む1...