gpt4 book ai didi

macos - docker-compose 重启后保留以前的环境变量

转载 作者:行者123 更新时间:2023-12-04 03:34:43 25 4
gpt4 key购买 nike

我是一名经验丰富的软件开发人员,但对 docker 还很陌生。
我正在尝试使用 bitnami/magento 基础镜像( https://hub.docker.com/r/bitnami/magento )为 Magento 2.4 构建开发环境。当我第一次下载 docker-compose.yml 并运行它时,一切正常。
注意:这不是 Magento 的问题。我认为使用的特定容器对我的问题来说是次要的。它更像是 Mac 上的 docker/docker-compose 问题。
我使用的原始 docker-compose.yml 文件:

version: '2'
services:
mariadb:
image: docker.io/bitnami/mariadb:10.3
environment:
- ALLOW_EMPTY_PASSWORD=yes
- MARIADB_USER=bn_magento
- MARIADB_DATABASE=bitnami_magento
volumes:
- 'mariadb_data:/bitnami/mariadb'
magento:
image: docker.io/bitnami/magento:2
ports:
- '80:8080'
- '443:8443'
environment:
- MAGENTO_HOST=localhost
- MAGENTO_DATABASE_HOST=mariadb
- MAGENTO_DATABASE_PORT_NUMBER=3306
- MAGENTO_DATABASE_USER=bn_magento
- MAGENTO_DATABASE_NAME=bitnami_magento
- ELASTICSEARCH_HOST=elasticsearch
- ELASTICSEARCH_PORT_NUMBER=9200
- ALLOW_EMPTY_PASSWORD=yes
volumes:
- 'magento_data:/bitnami/magento'
depends_on:
- mariadb
- elasticsearch
elasticsearch:
image: docker.io/bitnami/elasticsearch:6
volumes:
- 'elasticsearch_data:/bitnami/elasticsearch/data'
volumes:
mariadb_data:
driver: local
magento_data:
driver: local
elasticsearch_data:
driver: local
但后来我想进行调整,例如配置通过卷或 Magento 密码映射源代码的本地路径。为此,我通过添加用户:root(见下文)将容器重新配置为根容器。
我所做的是创建一个 .env 文件,在其中定义了一些变量,然后将它们应用到 docker-compose 文件中,如下所示:
.env 文件:
ENV_MAGENTO_PASS=admin

改编的yml文件(以添加ENV_MAGENTO_PASS为例):
  magento:
image: docker.io/bitnami/magento:2
user: root
ports:
- '80:8080'
- '443:8443'
environment:
- MAGENTO_HOST=localhost
- MAGENTO_DATABASE_HOST=mariadb
- MAGENTO_DATABASE_PORT_NUMBER=3306
- MAGENTO_DATABASE_USER=bn_magento
- MAGENTO_DATABASE_NAME=bitnami_magento
- MAGENTO_PASSWORD=${ENV_MAGENTO_PASS}
- ELASTICSEARCH_HOST=elasticsearch
- ELASTICSEARCH_PORT_NUMBER=9200
- ALLOW_EMPTY_PASSWORD=yes
volumes:
- /my/local/magento/devpath:/bitnami/magento
depends_on:
- mariadb
- elasticsearch
我还干预了两个位置的 ALLOW_EMPTY_PASSWORD 选项,并尝试通过变量更改卷映射,但后来意识到 - 环境变量只能应用于 yml 文件中的值(右侧)侧,而不是键上边。
关键是,为了让这一切发挥作用,我不得不多次破坏和重建一切。我为此使用了一个 shell 脚本(注释行也是我尝试过的):
docker pull bitnami/magento:2.4.2
#curl -sSL https://raw.githubusercontent.com/bitnami/bitnami-docker-magento/master/docker-compose.yml > docker-compose.yml

#docker builder prune
#docker system prune -a

#docker-compose down
docker-compose rm -f -s -v
#docker rm -f magento2_magento_1 magento2_elasticsearch_1 magento2_mariadb_1
#docker volume rm $(docker volume ls -q)
docker rmi -f $(docker images | grep bitnami/ | tr -s ' ' | cut -d ' ' -f 3)
docker-compose build --no-cache
docker-compose up -d --force-recreate
如您所见,我通常尝试删除所有内容、容器和图像,然后从头开始重新创建。然而,我无法让我的简单更改生效,并且在某些时候我意识到这是因为环境变量没有流行起来。或者有时,当我恢复更改时,一些先前声明的环境变量仍然存在(或不存在),因此无法通过所需的信息。
我尝试了您在脚本中看到的所有内容,甚至删除了所有缓存和图像,但有时旧的环境变量仍然存在!
例如,使用上面详述的配置,我在运行所有内容并在 magento 镜像上运行 docker 后收到此错误消息(因为容器已退出):
michaelheumann@Michaels-MacBook-Pro magento2 % docker run 0298768ce79e
mariadb 20:46:50.12
mariadb 20:46:50.12 Welcome to the Bitnami mariadb container
mariadb 20:46:50.12 Subscribe to project updates by watching https://github.com/bitnami/bitnami-docker-mariadb
mariadb 20:46:50.12 Submit issues and feature requests at https://github.com/bitnami/bitnami-docker-mariadb/issues
mariadb 20:46:50.12
mariadb 20:46:50.13 INFO ==> ** Starting MariaDB setup **
mariadb 20:46:50.14 INFO ==> Validating settings in MYSQL_*/MARIADB_* env vars
mariadb 20:46:50.14 ERROR ==> The MARIADB_ROOT_PASSWORD environment variable is empty or not set. Set the environment variable ALLOW_EMPTY_PASSWORD=yes to allow the container to be started with blank passwords. This is recommended only for development.
但是设置了 ALLOW_EMPTY_PASSWORD !!
有没有人遇到过这样的问题?我在 MacOS Big Sur 上工作,我了解 Mac 上的 Docker 创建某种隐藏的虚拟机来表示 Docker 容器。难不成这就是环境不易清理的原因?
有没有人有关于如何避免此类问题的建议或解释为什么会发生这种情况?
顺便说一句:有没有办法让我的卷的主机路径可配置?
抱歉阅读太长,感谢您的帮助。

最佳答案

最后,环境变量的问题与我在单个图像上执行 docker run 而不是 docker-compose run 有关,所以消息真的没有关系。
其他的事情很可能是音量的问题。我最终使用了这个 docker-composer.yml:

version: '2'
services:
mariadb:
image: docker.io/bitnami/mariadb:10.3
environment:
- ALLOW_EMPTY_PASSWORD=yes
- MARIADB_USER=bn_magento
- MARIADB_DATABASE=bitnami_magento
volumes:
- 'mariadb_data:/bitnami/mariadb'
magento:
image: docker.io/bitnami/magento:2
user: root
ports:
- '80:8080'
- '443:8443'
environment:
- PHP_MEMORY_LIMIT=512m
- MAGENTO_HOST=localhost
- MAGENTO_DATABASE_HOST=mariadb
- MAGENTO_DATABASE_PORT_NUMBER=3306
- MAGENTO_DATABASE_USER=bn_magento
- MAGENTO_DATABASE_NAME=bitnami_magento
- ELASTICSEARCH_HOST=elasticsearch
- ELASTICSEARCH_PORT_NUMBER=9200
- ALLOW_EMPTY_PASSWORD=yes
volumes:
- 'magento_data:/bitnami/magento'
depends_on:
- mariadb
- elasticsearch
elasticsearch:
image: docker.io/bitnami/elasticsearch:6
volumes:
- 'elasticsearch_data:/bitnami/elasticsearch/data'
volumes:
mariadb_data:
driver: local
magento_data:
driver: local
driver_opts:
type: none
device: ${ENV_MAGENTO_LOCAL_PATH}
o: bind
elasticsearch_data:
driver: local
在我的 .env 文件中声明了 ENV_MAGENTO_LOCAL_PATH。
我需要在重建所有内容之前删除所有卷,然后它终于起作用了。
以防万一这样的事情发生在别人身上。

关于macos - docker-compose 重启后保留以前的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67142834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com