【问题标题】:How do I see what a docker container that doesn't stay running is doing/tried to do?我如何查看不继续运行的 docker 容器正在做什么/试图做什么?
【发布时间】: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


【解决方案1】:

docker logs 可以在这里为您提供帮助,因为它还显示退出容器的日志 (Source)。

更新:累积。对于 OP,实际问题仍不清楚,但从新的 docker 和节点安装开始就可以解决问题并让 wp-env 运行。

【讨论】:

  • docker ps -a 没有列出退出的容器,如果我尝试使用图像 ID,它会显示“没有这样的容器”。
  • @philolegein,当使用 wp-env 时,db-env.js 似乎是应该使用/应用的文件 - 而在你的情况下不是。您是否尝试过resetting the database 或执行那里提到的其他后续步骤?
  • @philolegein,PS,如果你想深入挖掘:你可以检查 cli 图像的image layers,然后检查 wordpress 的 GitHub 存储库中的引用文件
  • 这似乎是它;或者更确切地说,在 wp-env 和 docker 之间进行了一些缓存。我之前已经对我的整个节点环境进行了核对,然后对 docker 进行了核对。这次我同时对两者进行了核弹,事情又开始起作用了。 :(
  • 很高兴你终于让它运行起来了!如果该特定问题再次出现,或者您有一天找出原因(也对此有点兴趣:P),请告诉我。
猜你喜欢
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多