我尝试使用Go初始化数据库。
我在postgres:alpine使用端口5433,因为5432已被另一个微服务应用程序占用。
func Init() {
DB, err = gorm.Open(postgres.New(postgres.Config{
DSN: "host=url_db user=gorm password=gorm dbname=gorm port=5433 sslmode=disable TimeZone=Asia/Tokyo",
}), &gorm.Config{})
if err != nil {
panic(err)
}
autoMigration()
}
url_db:
build:
context: ./api/services/url/db
dockerfile: Dockerfile
container_name: "url_db"
environment:
POSTGRES_USER: gorm
POSTGRES_PASSWORD: gorm
POSTGRES_DB: gorm
POSTGRES_HOST: url_db
ports:
- 5433:5433
您可以确认只有5432被公开here。我试图通过创建一个新的Dockerfile来暴露5433。
FROM postgres:alpine
EXPOSE 5433
但是我得到了这个错误。failed to initialize database, got error failed to connect to `host=url_db user=gorm database=gorm`: dial error (dial tcp 172.19.0.3:5433: connect: connection refused)
此评论:除非将postgres实际上配置为在该端口上监听,否则仅将端口暴露在docker镜像上就不会做任何事情。 – super 5分钟前
教我标题的问题(如何在postgres:alpine image上显示新端口(不是5432)?)不是重点,所以我更新了标题。
如何使postgres在容器的新暴露端口(不是5432)上监听?
最佳答案
您有多种选择:
选项1:定义自己的postgresql.conf
url_db:
build:
context: ./api/services/url/db
dockerfile: Dockerfile
container_name: "url_db"
command: postgres -c "config_file=/etc/postgresql/postgresql.conf"
environment:
POSTGRES_USER: gorm
POSTGRES_PASSWORD: gorm
POSTGRES_DB: gorm
POSTGRES_HOST: url_db
ports:
- 5433:5433
volumes:
- /path/to/config:/etc/postgresql/postgresql.conf
Postgres在容器内的/usr/share/postgresql/postgresql.conf.sample
处有一个示例配置。要运行配置:
docker run -i --rm postgres cat /usr/share/postgresql/postgresql.conf.sample > my-postgres.conf
选项1:覆盖RUN命令 url_db:
build:
context: ./api/services/url/db
dockerfile: Dockerfile
container_name: "url_db"
command: postgres -c port=5433
environment:
POSTGRES_USER: gorm
POSTGRES_PASSWORD: gorm
POSTGRES_DB: gorm
POSTGRES_HOST: url_db
ports:
- 5433:5433
关于postgresql - 如何使postgres在容器的新暴露端口(不是5432)上监听?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64888530/