【发布时间】:2021-03-16 07:44:02
【问题描述】:
我正在尝试使用WordPress local development environment,它设置了一堆 docker 容器(我是 Docker 新手)。其中之一是 WordPress CLI,我认为它正在运行一些脚本来进行一些配置,但是那个特定的容器不会继续运行(我相信这是故意的)。我猜它正在运行的脚本失败了,这是由于一些配置错误而发生的,但我不知道如何判断它在执行时正在做什么(它正在运行什么脚本,设置了哪些环境变量等...)。
有没有办法以某种方式“追踪”容器试图做什么?
$docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
wordpressdevelop/phpunit latest 8ebb6f73d762 2 days ago 732MB
wordpress latest 6c2c086d9173 2 days ago 554MB
wordpress <none> 408627ce79b1 2 days ago 551MB
composer latest ff854871a595 9 days ago 173MB
wordpress cli ee6de7f71aa0 9 days ago 137MB // I want to see what this does
mariadb latest e27cf5bc24fe 12 days ago 401MB
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19007b991e08 wordpress "docker-entrypoint.s…" 48 minutes ago Up 48 minutes 0.0.0.0:8888->80/tcp e6bc9159b910bda3d9b0dae2e230eabd_wordpress_1
26ac5c7ec782 wordpress "docker-entrypoint.s…" 48 minutes ago Up 48 minutes 0.0.0.0:8889->80/tcp e6bc9159b910bda3d9b0dae2e230eabd_tests-wordpress_1
8ae0a4dc4f77 mariadb "docker-entrypoint.s…" 48 minutes ago Up 48 minutes 0.0.0.0:54989->3306/tcp e6bc9159b910bda3d9b0dae2e230eabd_mysql_1
这是在 MacOS 11.2.2 上运行 Docker Desktop,Docker 版本 20.10.5。
我不确定它是否相关,但为了完整起见,我在下面包含了 wp-env 生成的 docker-compose.yml。
谢谢!
背景
这曾经只是工作,但我认为我在我的环境中破坏了一些东西,并试图诊断它。我最初在 WordPress StackExchange 上 asked about that,但后来更深入地挖掘。 Docker compose 步骤因此失败:
... ⠏ 配置 WordPress.Creating e6bc9159b910bda3d9b0dae2e230eabd_cli_run ... 完成 ⠹ 配置 WordPress.mysqlcheck: Got error: 1045: Access denied for user 'username_here'@'172.19.0.5' (using password: YES) 尝试连接时
数据库容器保持启动并运行,如果我查看数据库,我看到它已配置为无需密码即可进行 root 连接:
MariaDB [(none)]> select user, host, password from mysql.user;
+-------------+-----------+----------+
| User | Host | Password |
+-------------+-----------+----------+
| mariadb.sys | localhost | |
| root | localhost | |
| root | % | |
+-------------+-----------+----------+
3 rows in set (0.003 sec)
在主 WordPress 容器中,wp-config.php 文件包含这个小 sn-p:
...
// a helper function to lookup "env_FILE", "env", then fallback
function getenv_docker($env, $default) {
if ($fileEnv = getenv($env . '_FILE')) {
return file_get_contents($fileEnv);
}
else if ($val = getenv($env)) {
return $val;
}
else {
return $default;
}
}
...
/** MySQL database username */
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'username_here') );
/** MySQL database password */
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'password_here') )
鉴于错误消息,我假设 CLI 容器正在尝试执行类似的操作,但未设置环境变量 WORDPRESS_*,因此它使用的是默认值,而这...不起作用。我认为我需要做的是追查在运行过程中未能在早期设置这些变量的东西。
docker-compose.yml
version: '3.7'
services:
mysql:
image: mariadb
ports:
- '3306'
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'mysql:/var/lib/mysql'
wordpress:
build: .
depends_on:
- mysql
image: wordpress
ports:
- '${WP_ENV_PORT:-8888}:80'
environment:
WORDPRESS_DB_NAME: wordpress
volumes: &ref_0
- 'wordpress:/var/www/html'
- '/Users/cwr/src/cwra/foo:/var/www/html/wp-content/plugins/foo'
tests-wordpress:
depends_on:
- mysql
image: wordpress
ports:
- '${WP_ENV_TESTS_PORT:-8889}:80'
environment:
WORDPRESS_DB_NAME: tests-wordpress
volumes: &ref_1
- 'tests-wordpress:/var/www/html'
- '/Users/cwr/src/cwra/foo:/var/www/html/wp-content/plugins/foo'
cli:
depends_on:
- wordpress
image: 'wordpress:cli'
volumes: *ref_0
user: '33:33'
tests-cli:
depends_on:
- tests-wordpress
image: 'wordpress:cli'
volumes: *ref_1
user: '33:33'
composer:
image: composer
volumes:
- '/Users/cwr/src/cwra/foo:/app'
phpunit:
image: 'wordpressdevelop/phpunit:latest'
depends_on:
- tests-wordpress
volumes:
- 'tests-wordpress:/var/www/html'
- '/Users/cwr/src/cwra/foo:/var/www/html/wp-content/plugins/foo'
- 'phpunit-uploads:/var/www/html/wp-content/uploads'
environment:
LOCAL_DIR: html
WP_PHPUNIT__TESTS_CONFIG: /var/www/html/phpunit-wp-config.php
volumes:
wordpress: {}
tests-wordpress: {}
mysql: {}
phpunit-uploads: {}
【问题讨论】:
-
那篇文章对我来说似乎有点过于复杂,您是否只是在寻找一种在 mac 上使用 docker 启动 wordpress 项目的快速方法?使用 docker-compose 命令并配置您自己的
docker-compose.yml非常简单。如果您希望使用持久数据库、插件和上传在本地构建主题,请参阅我对她的回答,这可能会有所帮助。还包括简单的环境辅助函数...stackoverflow.com/questions/66605148/… -
我发现使用 homebrew 通过终端在你的 mac 上全局安装所有隐藏的包更容易在你的项目中运行像 composer 这样的命令。在 Mac 上安装 brew 后,您可以在主题目录中运行诸如
composer require nesbot/carbon之类的作曲家命令,以将相关作曲家包安装在vendors文件夹中,然后在主题functions.php中包含require 'vendor/autoload.php';。我发现你在.yml中运行的越少,你本地的 wp 环境性能就越好。 -
看起来 brew 还包括
wp-cli... imgur.com/a/VB3o9ta ...brew 非常方便,例如您可以在终端中运行brew upgrade来更新所有软件包。见brew docs。
标签: wordpress docker docker-compose