这就是我加载.env
文件并设置变量的代码段。
// init executes the initial configuration.
func init() {
// loads the file for env. variables
if err := godotenv.Load(".env"); err != nil {
log.Printf("failed to load env file: %v\n", err)
}
// env variables are set based values within the .env file.
os.Setenv("dbname", os.Getenv("DB_NAME"))
os.Setenv("username", os.Getenv("DB_USERNAME"))
os.Setenv("pw", os.Getenv("DB_PASSWORD"))
os.Setenv("dbport", os.Getenv("DB_PORT"))
os.Setenv("server_port", os.Getenv("SERVER_PORT"))
os.Setenv("hostname", os.Getenv("DB_CONTAINER_NAME"))
}
当我运行docker-compose up --build server
时,尽管出现了错误,但一切都正常,如下所示:
server_1 | 2022/09/07 11:44:06 failed to load env file: open .env: no such file or directory
然而,环境是以某种方式设置的。
这是我的docker-compose.yml
。
version: '3.8'
services:
db:
image: postgres:14.1-alpine
container_name: ${DB_CONTAINER_NAME}
restart: always
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USERNAME}
- POSTGRES_PASSWORD=${DB_PASSWORD}
ports:
- ${DB_PORT}:${DB_PORT}
env_file:
- .env
volumes:
- db:/var/lib/postgresql/data
- ./psql/statements/create-tables.sql:/docker-entrypoint-initdb.d/create_table.sql
server:
build:
context: .
dockerfile: Dockerfile
env_file: .env
depends_on:
- ${DB_CONTAINER_NAME}
networks:
- default
ports:
- ${SERVER_PORT}:${SERVER_PORT}
volumes:
db:
driver: local
以及我的go应用程序的Dockerfile
。
FROM golang:1.18
WORKDIR /src
COPY go.sum go.mod ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /bin/app .
FROM alpine
COPY --from=0 /bin/app /bin/app
ENTRYPOINT ["/bin/app"]
我修改了Dockerfile
的一些内容,我得到了不同的错误。造成这种问题的原因可能是什么?因为它无法加载,但仍然有效。
发布于 2022-09-08 15:59:36
看起来env变量是由yaml文件中提到的带有.env
的env_file: .env
文件中的docker组合来设置的。
open .env: no such file or directory
是从go应用程序中打印出来的,因为.env文件在容器中不可用,在Dockerfile
中也没有COPY/ADD
命令。
https://stackoverflow.com/questions/73651880
复制相似问题