在docker-compose.yml文件中的postgresql连接字符串

5

我正在运行具有Docker支持的NetCore项目。我的docker-compose.override.yml文件如下:

version: '3.4'

services:
  traefik:
    ports:
      - '80:80'
      - '443:443'
      - '8080:8080'

  myapi:
    environment:
      - 'ASPNETCORE_ENVIRONMENT=Development'
      - 'ConnectionStrings:DbConnection=postgresql://postgres'
      - 'Services:Authorization=http://10.0.75.1'
      - 'Authorization:Url=http://10.0.75.1'

  postgres:
    environment:
      POSTGRES_USER: "user"
      POSTGRES_PASSWORD: "pass"
      POSTGRES_DB: testdb
    ports:
      - 5432:5432

  pgadmin4:
    environment:
      - PGADMIN_DEFAULT_EMAIL=user@domain.com
      - PGADMIN_DEFAULT_PASSWORD=SuperSecret
    ports:
     - 19000:80

还有docker-compose.yml文件:

version: '3.4'

services:
  traefik:
    image: traefik
    command: --web --docker --docker.domain=docker --logLevel=DEBUG
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /develop/traefik/acme:/etc/traefik/acme

  postgres:
    image: postgres
    labels: { "traefik.enable":"false" }

  myapi:
    image: myapi
    build:
      context: .
      dockerfile: MyApi/Dockerfile
    links:
      - postgres
    labels: { "traefik.backend":"myapi", "traefik.frontend.rule":"PathPrefixStrip:/" }

  pgadmin4:
    image: dpage/pgadmin4
    links:
      - postgres

我无法将myapi服务的连接字符串绑定到postgres docker容器。我还尝试过postgresql://postgres:postgres@db:5432、postgresql://以及仅使用postgres,但都没有成功。
这是我的日志信息:
System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0.

显然我无法连接到数据库服务器。

当我在本地运行应用程序时,我的原始连接字符串非常有效,格式如下:

User ID = user;Password=pass;Server=localhost;Port=5432;Database=testdb;Integrated Security=true;Pooling=true

有什么想法可以将我的服务与docker中的postgres映射起来吗? 谢谢!


这个解决方案对我有用 进入链接描述 - Ömer Ceylan
2个回答

4

我认为你应该使用这个:

User ID = user;Password=pass;Server=postgres;Port=5432;Database=testdb;Integrated Security=true;Pooling=true

3

我在我的docker环境中(使用docker-compose的Linux容器)多个docker容器中成功实现以下操作:

连接字符串:

host=host.docker.internal;port=5432;database=db1;username=userxyz;password=password123

docker-compose.yml:

version: '3.5'

networks:
  proxynet:
    driver: bridge
services:
  db1:
    image: postgres:11.4
    restart: always
    environment:
      - POSTGRES_USER=userxyz
      - POSTGRES_PASSWORD=password123
      - POSTGRES_DB=mydb1
    ports:
      - "5434:5432"
    networks:
      - proxynet
  auth_db:
    image: postgres:11.4
    restart: always
    environment:
      - POSTGRES_USER=userxyz
      - POSTGRES_PASSWORD=password123
      - POSTGRES_DB=mydb2
    ports:
      - "5435:5432"
    networks:
      - proxynet
  myprojectapi:
    image: ${DOCKER_REGISTRY-}myprojectapi
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
    ports:
      - "443:443"
      - "80:80"
    build:
      context: .
      dockerfile: myprojectapi/Dockerfile
    depends_on:
      - db1
      - auth_db
    networks:
      - proxynet

这将启动2个postgresql数据库容器,其中包含2个数据库和一个.NET Core项目(类似于.NET Core Web API),可以与这些数据库通信。

我可以通过右键单击> 添加> docker支持,以及右键单击> 添加>容器编排器支持来为要docker化的项目生成基础,并使用这2个数据库。 请参阅Microsoft文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接