我正在开发一个动态 DockerFile,它可以与 .env 文档进行通信。我创建这个是为了为我的开发团队提供良好的本地环境。他们使用 Docker Desktop 并使用 Docker-Compose、DockerFile 和 .env 配置创建 Docker 开发环境。
只有当我在 Docker Desktop 应用程序中运行它时,一切似乎都很好,它仅在依赖于 .env 文档时停止在 DockerFile 内部的部分。
DockerFile 顶部部分:
# Use a dummy base image
FROM alpine:latest AS dummy
# Define base image
# LANGUAGE: Programming language to use for development (Default: php)
ARG LANGUAGE
# LANGUAGE_VERSION: Language version
ARG LANGUAGE_VERSION
# WEB_SERVER: Web server
ARG WEB_SERVER
# Import environment variables from docker-compose-dev.env
ENV LANGUAGE=$LANGUAGE \
LANGUAGE_VERSION=$LANGUAGE_VERSION \
WEB_SERVER=$WEB_SERVER
# Define base image
FROM ${LANGUAGE}:${LANGUAGE_VERSION}-${WEB_SERVER}
RUN if [ -z "${LANGUAGE}" ]; then \
echo "Error: LANGUAGE argument is missing"; \
exit 1; \
fi
# Install required packages and dependencies
我的 .env 示例:
# --------------------------------------------------------
# Docker Compose Configuration
# --------------------------------------------------------
# Programming Language Configuration
# --------------------------------------------------------
# Programming language to use for development
# Options: php, flutter
# Default: php
LANGUAGE=php
# e.g.
我的 Docker-Compose 示例:
version: '3.8'
services:
web:
env_file:
- .env
stdin_open: true
tty: true
build:
context: .
dockerfile: Dockerfile
ports:
- ${WEB_SERVER_PORT}:${WEB_SERVER_PORT}
volumes:
- ${APP_SOURCE_CODE_PATH}:${CONTAINER_WORKDIR}
environment:
- APP_ENV=${APP_ENV}
networks:
- mynetwork
init: true
关于参数,有些部分缺失,但我只与大家分享示例,而不是完整的参数列表。
非常感谢!
我找到了解决方案。我需要在 docker compose 中呈现环境和参数,并且只使用 .env,否则 docker compose 不会看到它。