Mic*_*ann 5 macos docker docker-compose
我是一名经验丰富的软件开发人员,但对 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
Run Code Online (Sandbox Code Playgroud)
但后来我想进行调整,例如配置通过卷或 Magento 密码映射源代码的本地路径。为此,我通过添加用户:root(见下文)将容器重新配置为根容器。
我所做的是创建一个 .env 文件,在其中定义了一些变量,然后将它们应用到 docker-compose 文件中,如下所示:
.env 文件:
ENV_MAGENTO_PASS=admin
Run Code Online (Sandbox Code Playgroud)
改编后的yml文件(添加ENV_MAGENTO_PASS作为示例):
ENV_MAGENTO_PASS=admin
Run Code Online (Sandbox Code Playgroud)
我还干预了两个位置中的 ALLOW_EMPTY_PASSWORD 选项,并尝试通过变量更改卷映射,但很久以后才意识到,环境变量只能应用于 yml 文件中的值(右侧)侧,而不是键上边。
关键是,为了让这一切发挥作用,我必须多次销毁并重新创建所有内容。我为此使用了一个 shell 脚本(注释行也是我尝试过的):
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
Run Code Online (Sandbox Code Playgroud)
如您所见,我通常尝试擦除所有内容、容器和图像,然后从头开始重新创建。然而,我无法让我的简单更改生效,在某些时候我意识到这是因为环境变量没有流行。或者有时,当我恢复更改时,一些先前声明的环境变量仍然存在(或不存在),因此所需的信息无法通过。
我尝试了您在脚本中看到的所有内容,甚至删除了所有缓存和图像,但有时旧的环境变量仍然存在!
例如,使用上面详细的配置,在运行所有内容并在 magento 映像上执行 docker run 后,我收到此错误消息(因为容器已退出):
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.
Run Code Online (Sandbox Code Playgroud)
但 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
Run Code Online (Sandbox Code Playgroud)
在我的 .env 文件中声明 ENV_MAGENTO_LOCAL_PATH 。
我需要在重建所有内容之前删除所有卷,然后它终于起作用了。
以防万一类似的事情发生在其他人身上。
| 归档时间: |
|
| 查看次数: |
3641 次 |
| 最近记录: |