У меня есть следующий код:
func NewConnection(connectionString string) (*sql.DB, error) {
db, err := sql.Open("postgres", connectionString)
if err := db.Ping(); err != nil {
log.Panic(err)
}
return db, err
}
И следующий Dockerfile:
# Build env
FROM golang:alpine AS build
ARG stage
RUN apk update && apk upgrade && \
apk add --no-cache bash git openssh build-base && \
go get -u golang.org/x/vgo
ADD . /src
WORKDIR /src
RUN vgo mod init && vgo install ./...&& vgo build -o service
# Runtime env
FROM alpine
ARG stage
RUN apk update && apk add --no-cache ca-certificates openssl openssl-dev
WORKDIR /app
COPY --from=build /src/${stage}-env.yml /app/
COPY --from=build /src/service /app/
ENV CONFIG_PATH=.
ENTRYPOINT ./service
Моя функция NewConnection извлекает строку подключения Redshift из очереди вместе с некоторыми данными.Который все работает локально, когда я тестирую против контейнера postgres.Однако при развертывании моей службы я получаю следующую ошибку:
panic: pq: parameter "ssl" cannot be changed after server start
Мое соединение содержит ?ssl=true
, и оно должно быть SSL, мы подключаемся от службы Fargate в AWS, к AWS Redshift и т. Д.Поэтому я думаю, что проблема может быть связана с отсутствием ssl-зависимостей в моем контейнере Alpine, отсутствием сертификатов или чем-то подобным.