首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在坞-组合文件中使用的Dockerfile中定义ENV变量

在坞-组合文件中使用的Dockerfile中定义ENV变量
EN

Stack Overflow用户
提问于 2018-02-14 15:10:21
回答 3查看 816关注 0票数 1

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

代码语言:javascript
复制
project/
|
|______docker-compose.yml
|______database/
       |______Dockerfile
|______webapp/
       |______Dockerfile

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

代码语言:javascript
复制
FROM mysql:8.0.3
ENV MYSQL_ROOT_PASSWORD=secret
ENV MYSQL_DATABASE=clients
EXPOSE 3306

我的docker-compose.yml文件如下所示:

代码语言:javascript
复制
version: "3"
services:
database-server:
  build: ./database
  ports:
    - 3306:3306

因此,正如您在上面看到的,我在我的ENV中定义了MYSQL_ROOT_PASSWORD变量(MYSQL_ROOT_PASSWORDMYSQL_DATABASE),所以当我使用docker-compose时,我希望在构建过程中使用它们。但他们不知道!

只有当我使用ENVdocker build命令在project/database中手动构建容器时,才会使用我的Dockerfile变量。

代码语言:javascript
复制
Dockerfile
|
|
| [Variables are available here]
|
|
docker-compose.yml
|
|
| [Variables are NOT available here]
|
docker run

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

谢谢!

更新

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

代码语言:javascript
复制
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..
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-14 15:49:36

我怀疑停靠组合使用的是比您预期的更新图像更旧的图像。试试这个:

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

docker-compose build,以使坞-组成重建所有在yml文件中的构建方向。

docker-compose up重新启动堆栈。码头-组合应该拿起新建立的database-server图像与ENV设置。

票数 1
EN

Stack Overflow用户

发布于 2018-02-14 15:26:31

没有必要为此目的建立当地形象。

代码语言:javascript
复制
version: '3'

services:

   database-server:
     image: mysql:8.0.3
     ports:
       - "3306:3306"
     environment:
       MYSQL_ROOT_PASSWORD: password
       MYSQL_DATABASE: clients

这是更好的记录和更容易维护。

票数 2
EN

Stack Overflow用户

发布于 2018-02-14 15:26:54

代码语言:javascript
复制
You can use them like this:
version: "3"
services:
database-server:
  build: ./database
  ports:
    - 3306:3306
  environment:
    - MYSQL_ROOT_PASSWORD_VARIABLE_FOR_DOCKER_ENV=${MYSQL_ROOT_PASSWORD}
    - MYSQL_DATABASE_VARIABLE_FOR_DOCKER_ENV=${MYSQL_DATABASE}

更新:在您的情况下,您可以轻松地:

代码语言:javascript
复制
environment:
  - MYSQL_ROOT_PASSWORD_VARIABLE_FOR_DOCKER_ENV=${MYSQL_ROOT_PASSWORD}
  - MYSQL_DATABASE_VARIABLE_FOR_DOCKER_ENV=${MYSQL_DATABASE}

然而,正如安德烈亚斯所说,把它们留在船坞里更整洁。除非这些值会频繁变化。不过,我怀疑密码是这样的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48790367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档