docker-compose
を使用してPostgreSQLのシェル(psql
)にアクセスしようとしていますが、問題が発生しています...これが私のdocker-compose
ファイルです。
main:
build: .
volumes:
- .:/code
links:
- postgresdb
environment:
- DEBUG=true
postgresdb:
build: utils/sql/
ports:
- "5432"
environment:
- DEBUG=true
psql
サービスとmain
サービスを実行して、postgresdb
にアクセスしようとしました。
docker-compose run postgresdb psql -h postgresdb -U docker mydatabase
しかし、私が得るのはpsql: could not translate Host name "postgresdb" to address: Name or service not known
...だけです。これは、データベース構成ファイルのホストとしてpostgresdb
を使用しているため、理解できません。例:
DB_ACCESS = {
'drivername': 'postgres',
# Name of docker-compose service
'Host': 'postgresdb',
'port': '5432',
'username': 'docker',
'password': '',
'database': 'mydatabase'
}
Postgresdbコンテナをそれ自体から接続しようとしていますが、コンテナはpostgresdb
コンテナ内に設定したエイリアスmain
を認識していません。
次の例を考えてみましょう。
$ docker run -it --rm ubuntu hostname --fqdn
817450b29b34
これで、Postgresdbがpostgresdb
を解決する方法を知らないことがわかります。しかし、postgresdb
はとにかくmain
から解決できるはずです。
これを修正するいくつかの機会があります:
docker-compose.yml
);main
コンテナから次のようにPostgresdbにアクセスします:$ docker exec -it main_container_full_name psql -h postgresdb -U docker mydatabase
質問が最初に行われてから、状況は少し変わりました。
Docker-composeを使用してPostgreSQLのシェル(psql)にアクセスする方法は次のとおりです。
docker-compoose.yml
version: '2'
services:
postgresdb:
build: utils/sql/
ports:
- "5432"
environment:
- DEBUG=true
main:
build: .
volumes:
- .:/code
depends_on:
- postgresdb
environment:
- DEBUG=true
Dockerエンジンシェルで...
docker ps
コマンドからコンテナーID(またはコンテナー名)を見つけます以下の例を参照してください。
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.11.2, build HEAD : a6645c3 - Wed Jun 1 22:59:51 UTC 2016
Docker version 1.11.2, build b9f10c9
docker@default:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b563764171e2 poc_web "bundle exec Rails s " 43 minutes ago Up 43 minutes 0.0.0.0:3000->3000/tcp poc_web_1
c6e480b0f26a postgres "/docker-entrypoint.s" 49 minutes ago Up 49 minutes 0.0.0.0:5432->5432/tcp poc_db_1
docker@default:~$ docker exec -it c6e480b0f26a sh
# su - postgres
No directory, logging in with HOME=/
$ psql
psql (9.5.3)
Type "help" for help.
postgres=#
注:
version: '2' services:
db: image: postgres ports: - "5432:5432" . . .
参照
参照用に最小限のdocker-compose.yml
ファイルから始めましょう。
version: "3"
services:
postgres:
image: postgres:9.5
あなたはdocker-compose up
であなたのサービスを立ち上げます。
接続したいデータベースがtest
と呼ばれていると仮定しましょう。
回答:docker-compose run postgres psql -h YOUR_SERVICE -U YOUR_USER -d YOUR_DATABASE
この例では、これはdocker-compose run postgres psql -h postgres -U postgres -d test
になります。
または、psqlの接続文字列を使用することもできます:docker compose run postgres psql -d postgres://YOUR_USER@YOUR_SERVICE/YOUR_DATABASE
以下は私のために働いた:
in docker-compose.yaml
services:
db:
container_name: db
image: postgres
次に、docker-compose up
を実行した後
走れる
Sudo docker exec -it -u postgres db psql
postgres=#
シェルを取得するには
注:
docker ps
を実行してcontainer_idを取得することを回避できました。-u postgres
を使用すると、postgresスーパーユーザーとしてコンテナにアクセスできます。