我的情况如下,我有一个具有这种结构的项目:
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_PASSWORD
和MYSQL_DATABASE
)Dockerfile
,所以我希望它们在我使用docker-compose
. 但他们没有!
我的ENV
变量仅在我project/database
使用Dockerfile
和docker 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] 删除。
我来说两句