Docker-compose环境变量

我正在尝试设置一个postgres容器,并希望使用以下命令设置postgres登录名:

POSTGRES_USER: docker

POSTGRES_PASSWORD: docker

所以我像这样创建了docker-compose.yml

web:

build: .

ports:

- "62576:62576"

links:

- redis

- db

db:

image: postgres

environment:

POSTGRES_PASSWORD: docker

POSTGRES_USER: docker

redis:

image: redis

我还尝试了将环境变量声明为db部分的其他语法:

db:

image: postgres

environment:

- POSTGRES_PASSWORD=docker

- POSTGRES_USER=docker

但是这些选项似乎都不起作用,因为无论出于什么原因,无论何时我尝试使用各种连接字符串连接到postgres数据库:

postgres://postgres:postgres@db:5432/users

postgres://postgres:docker@db:5432/users

postgres://docker:docker@db:5432/users

与抱怨没有用户数据库相反,它们都给我身份验证失败。

回答:

您收到的身份验证错误将有很大帮助!

我用您的参数启动了postgres图像:

docker run --name db -d -e POSTGRES_PASSWORD=docker -e POSTGRES_USER=docker postgres

然后我执行了:

docker exec -it db psql -U docker user

psql: FATAL: database "user" does not exist

我收到您期望的错误消息,因为我具有信任身份验证:

docker exec -it db cat /var/lib/postgresql/data/pg_hba.conf | grep -v '^#'

local all all trust

host all all 127.0.0.1/32 trust

host all all ::1/128 trust

host all all 0.0.0.0/0 md5

为了模拟您的Web容器,我将运行postgres容器的另一个实例并链接db容器,然后再连接回db容器:

core@ku1 /tmp/i $ docker run --rm --name web --link db:db -it postgres psql -h db -Udocker user

Password for user docker:

psql: FATAL: password authentication failed for user "docker"

如果输入了错误的密码,则会收到身份验证错误。但是,如果我输入正确的密码:

core@ku1 /tmp/i $ docker run --rm --name web --link db:db -it postgres psql -h db -Udocker user

Password for user docker:

psql: FATAL: database "user" does not exist

一切似乎都正常工作。我将它们全部放入yaml文件中,并进行了同样的测试:

web:

image: postgres

command: sleep 999

ports:

- "62576:62576"

links:

- db

db:

image: postgres

environment:

POSTGRES_PASSWORD: docker

POSTGRES_USER: docker

然后用docker-compose启动它:

core@ku1 /tmp/i $ docker-compose -f dc.yaml up

Creating i_db_1...

Creating i_web_1...

Attaching to i_db_1, i_web_1

db_1 | ok

db_1 | creating template1 database in /var/lib/postgresql/data/base/1 ... ok

db_1 | initializing pg_authid ... ok

db_1 | initializing dependencies ... ok

db_1 | creating system views ... ok

db_1 | loading system objects' descriptions ... ok

db_1 | creating collations ... ok

db_1 | creating conversions ... ok

db_1 | creating dictionaries ... ok

db_1 | setting privileges on built-in objects ... ok

db_1 | creating information schema ... ok

db_1 | loading PL/pgSQL server-side language ... ok

db_1 | vacuuming database template1 ... ok

db_1 | copying template1 to template0 ... ok

db_1 | copying template1 to postgres ... ok

db_1 | syncing data to disk ... ok

db_1 |

db_1 | WARNING: enabling "trust" authentication for local connections

db_1 | You can change this by editing pg_hba.conf or using the option -A, or

db_1 | --auth-local and --auth-host, the next time you run initdb.

db_1 |

db_1 | Success. You can now start the database server using:

db_1 |

db_1 | postgres -D /var/lib/postgresql/data

db_1 | or

db_1 | pg_ctl -D /var/lib/postgresql/data -l logfile start

db_1 |

db_1 |

db_1 | PostgreSQL stand-alone backend 9.4.1

db_1 | backend> statement: CREATE DATABASE "docker" ;

db_1 |

db_1 | backend>

db_1 |

db_1 | PostgreSQL stand-alone backend 9.4.1

db_1 | backend> statement: CREATE USER "docker" WITH SUPERUSER PASSWORD 'docker' ;

db_1 |

db_1 | backend>

db_1 | LOG: database system was shut down at 2015-04-12 22:01:12 UTC

db_1 | LOG: database system is ready to accept connections

db_1 | LOG: autovacuum launcher started

^Z

[1]+ Stopped docker-compose -f dc.yaml up

core@ku1 /tmp/i $ bg

您可以看到用户和密码已创建。我执行:

core@ku1 /tmp/i $ docker exec -it i_web_1 psql -Udocker -h db user

Password for user docker:

psql: FATAL: password authentication failed for user "docker"

core@ku1 /tmp/i $

db_1 | FATAL: password authentication failed for user "docker"

db_1 | DETAIL: Connection matched pg_hba.conf line 95: "host all all 0.0.0.0/0 md5"

core@ku1 /tmp/i $ docker exec -it i_web_1 psql -Udocker -h db user

Password for user docker:

psql: FATAL: database "user" does not exist

db_1 | FATAL: database "user" does not exist

因此,我唯一能想到的是您正在尝试从主机而不是Web容器连接到数据库?还是您的Web容器未将“

db”用作连接的主机?您对Web容器的定义不包含任何我可以看到的错误。

以上是 Docker-compose环境变量 的全部内容, 来源链接: utcz.com/qa/398195.html

回到顶部