首页 > 解决方案 > 我如何查看不继续运行的 docker 容器正在做什么/试图做什么?

问题描述

我正在尝试使用WordPress 本地开发环境,它设置了一堆 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…&quot;   48 minutes ago   Up 48 minutes   0.0.0.0:8888->80/tcp      e6bc9159b910bda3d9b0dae2e230eabd_wordpress_1
26ac5c7ec782   wordpress   "docker-entrypoint.s…&quot;   48 minutes ago   Up 48 minutes   0.0.0.0:8889->80/tcp      e6bc9159b910bda3d9b0dae2e230eabd_tests-wordpress_1
8ae0a4dc4f77   mariadb     "docker-entrypoint.s…&quot;   48 minutes ago   Up 48 minutes   0.0.0.0:54989->3306/tcp   e6bc9159b910bda3d9b0dae2e230eabd_mysql_1

这是在运行 Docker Desktop、Docker 版本 20.10.5 的 MacOS 11.2.2 上。

我不确定它是否相关,但为了完整起见,我在下面包含了 wp-env 生成的 docker-compose.yml。

谢谢!

背景

这曾经只是工作,但我认为我在我的环境中破坏了一些东西,并试图诊断它。我最初在 WordPress StackExchange 上询问过这个问题,但后来深入挖掘。Docker compose 步骤因此失败:

... ⠏ 配置 WordPress.Creating e6bc9159b910bda3d9b0dae2e230eabd_cli_run ... 完成 ⠹ 配置 WordPress.mysqlcheck:出现错误:1045:访问拒绝用户 'username_here'@'172.19.0.5'(使用密码: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 文件包含这个小片段:

...
// 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: {}

标签: wordpressdockerdocker-compose

解决方案


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

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


推荐阅读