在 docker-compose 文件中使用的 Dockerfile 中定义 ENV 变量

用户3426711

我的情况如下,我有一个具有这种结构的项目:

project/
|
|______docker-compose.yml
|______database/
       |______Dockerfile
|______webapp/
       |______Dockerfile

我的问题是database容器构建。我的database/Dockerfile是以下内容:

FROM mysql:8.0.3
ENV MYSQL_ROOT_PASSWORD=secret
ENV MYSQL_DATABASE=clients
EXPOSE 3306

我的docker-compose.yml文件看起来像这样:

version: "3"
services:
database-server:
  build: ./database
  ports:
    - 3306:3306

正如你在上面看到的,我在 my 中定义了我的ENV变量(MYSQL_ROOT_PASSWORDMYSQL_DATABASEDockerfile,所以我希望它们在我使用docker-compose. 但他们没有!

我的ENV变量仅在我project/database使用Dockerfiledocker build命令手动构建容器时使用

Dockerfile
|
|
| [Variables are available here]
|
|
docker-compose.yml
|
|
| [Variables are NOT available here]
|
docker run

可以做我想做的事吗?我想在其中定义与特定容器相关的所有内容Dockerfile,并保留docker-compose.yml以定义容​​器之间的关系和链接。

谢谢!

更新

正如@Tim 所问,这是我的输出docker-compose up

Starting root_database-server_1 ... done
Starting root_webapp_1 ... done
Attaching to root_database-server_1, root_webapp_1
database-server_1  | error: database is uninitialized and password option is         not specified
database-server_1  |   You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
...
... Rest of the log is fine..
蓝调

我怀疑 docker-compose 使用的图像比您期望的更新图像更旧。试试这个:

docker-compose down停止并删除堆栈中正在使用的任何现有容器。docker-compose rm如果一切都已经停止,您可以使用

docker-compose build 使 docker-compose 在 yml 文件中使用构建方向重建所有内容。

docker-compose up重新启动您的堆栈。docker-compose 应该database-server使用 ENV 集获取新建的图像。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Docker-compose:在env文件中设置一个变量,并在Dockerfile中使用它

docker-compose使用.env文件中的环境变量

使用 Dockerfile 从 .env 环境文件中的变量定义变量

在Dockerfile或docker-compose中定义环境变量?

docker-compose不能使用.env中的变量

Docker compose 从 .env 文件中获取 env 变量并传递给 docker build

Docker如何在构建过程中在Dockerfile中使用env_file变量

如何在Dockerfile中使用docker-compose.yml中的环境变量?

在docker compose run命令中使用env变量

Docker-compose 在命令中使用 env_file 变量

Dockerfile中的Env变量

docker compose环境变量未在Dockerfile中设置变量

如何在带有golang的不同容器中使用docker-compose env文件变量?

如何在docker-compose.yml的.env文件中使用环境变量?

使用ENV变量在Dockerfile中创建目录

从docker-compose.yml文件将变量传递给Dockerfile

将 shell 中指定的 ENV 变量从 docker-compose 传递到 Dockerfile

在运行时将带有docker-compose.yml的ENV变量传递给Dockerfile

Docker Compose:从 Dockerfile 在 php.ini 中设置变量

Dockerfile - 使用 env 文件中的环境变量

为了在其他容器中使用它们,我是否需要做更多的事情而不是在docker-compose文件中添加env变量?

docker-compose 无法从 SOME.env 文件中检索变量

docker 文件中未替换的 env 变量

如何在application.yml中使用Docker .env文件中设置的变量?

Docker不能在docker-compose中使用args(使用.env中的args)

如何在 Dockerfile 中设置要在 Docker 容器中覆盖的变量 ENV?

docker-compose 中的 env 文件名卷

Docker从docker-compose.yml设置ENV变量

在Dockerfile中使用docker-compose build --build-arg中的参数