在 Docker 中使用卷访问容器文件系统

2024-02-15

我是 Docker 的新手,正在尝试让卷正常工作,但有些事情不太正确。

我已经在 Docker 上安装了 Wordpress,如 Docker 教程中所述:https://docs.docker.com/compose/wordpress/ https://docs.docker.com/compose/wordpress/

使用 Docker Desktop,我成功地启动并运行了该映像,并按照 Wordpress 的安装向导进行操作。到目前为止,一切都很好。

现在,我希望能够访问本地计算机上的 Wordpress 文件,以便可以在 vscode 中编辑它们。

我找到了几篇文章,例如访问正在运行的 docker 容器文件系统 https://stackoverflow.com/questions/42746218/access-running-docker-container-filesystem,它们都暗示着同一件事:如果你设置volumes:财产在docker-compose.yml要将本地项目目录映射到容器中的 webroot,它应该“正常工作”。但事实并非如此。

我的 Mac 上的本地目录位于我的桌面上,名为wordpress-docker。这个目录里面住着我的docker-compose.yml.

我已经编辑过docker-compose.yml所以它有这个:

wordpress:
  volumes:
    - ~/:/var/www/html

I know /var/www/html是正确的,因为如果我通过 Docker Desktop ssh 进入容器,然后运行pwd它给了我那个目录。我还可以看到这正是运行后 WordPress 文件的位置ls -l:

我想做的就是让上面列出的文件可以在我的wordpress-docker我的桌面上的目录。鉴于docker-compose.yml位于同一目录中,我都尝试过~/ and ./作为前面的部分/var/www/html.

重新启动容器时不会显示任何错误消息。但我里面唯一的文件wordpress-docker我的桌面上是docker-compose.yml。它没有显示上面屏幕截图中的任何文件,这是我想要和期望的。

为什么它不显示容器中的文件?我发现的所有教程似乎都表明它就是这么简单 - 您将本地目录映射到容器中的目录,然后它就可以工作了。就我而言,事实并非如此。

macOS Catalina 上的 Docker 引擎 20.10.0、Docker Desktop 3.0.0。


我发现 WordPress 开发的经验法则是,在使用 docker 本地环境时,wp 核心文件不应更改或可访问。

每次你docker-compose up -d一个docker wordpress环境,docker会重新构建一个当前安装的docker wordpress版本。

因此,与其映射整个 WordPress 卷,不如对当前本地项目动态的文件和数据使用持久映射。

本质上,您的 Mac 上的每个本地 WordPress 项目都会有一个文件夹,您可以随时上下移动该文件夹。然后将每个文件夹作为存储库提交到 git。

确保你.gitignore上传、插件、数据库、node_modules ETC...

例如,在 Mac 上的任意位置创建一个项目文件夹并添加docker-compose.yml进入包含以下配置代码的文件夹...

version: '3.7'

networks:
  wordpress:
    ipam:
      config:
        - subnet: 172.25.0.0/16

services:

  # here is our mysql container
  db:
    image: mysql:5.7
    volumes:
      - ./db:/var/lib/mysql:delegated
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    networks:
      - wordpress

  # here is our wordpress container 
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      # our persistent local data re routing
      - .:/var/www/html/wp-content/themes/testing:delegated
      - ./plugins:/var/www/html/wp-content/plugins
      - ./uploads:/var/www/html/wp-content/uploads
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    ports:
      - "80:80"
    restart: always
    networks:
      - wordpress
    environment:
      # our local dev environment
      WORDPRESS_DEBUG: 1
      DEVELOPMENT: 1
      # docker wp config settings
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_AUTH_KEY: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
      WORDPRESS_SECURE_KEY: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
      WORDPRESS_LOGGED_IN_KEY: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
      WORDPRESS_NONCE_KEY: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
      WORDPRESS_SECURE_AUTH_SALT: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
      WORDPRESS_LOGGED_IN_SALT: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
      WORDPRESS_NONCE_SALT: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
      WORDPRESS_CONFIG_EXTRA: |

        /* development parameters */
        define('WP_CACHE', false);
        define('ENVIRONMENT', 'local');
        define('WP_DEBUG', true);

        /* configure mail server */
        define('WORDPRESS_SMTP_AUTH', false);
        define('WORDPRESS_SMTP_SECURE', '');
        define('WORDPRESS_SMTP_HOST', 'mailhog');
        define('WORDPRESS_SMTP_PORT', '1025');
        define('WORDPRESS_SMTP_USERNAME', null);
        define('WORDPRESS_SMTP_PASSWORD', null);
        define('WORDPRESS_SMTP_FROM', '[email protected] /cdn-cgi/l/email-protection');
        define('WORDPRESS_SMTP_FROM_NAME', 'Whoever');

        /* add anymore custom configs here... */

  # here is our mail hog container
  mailhog:
    image: mailhog/mailhog:latest
    ports:
      - "8025:8025"
    networks:
      - wordpress

现在在此文件夹中运行命令docker-compose up -d这将构建一个全新的安装,在你的想法中看起来像这样......

在访问和设置此本地 WordPress 安装之前http://locolhost http://locolhost你需要更换uploads.ini带有 true 的文件夹uploads.ini配置文件。用这个替换文件夹.ini配置代码...

file_uploads = On
memory_limit = 2000M
upload_max_filesize = 2000M
post_max_size = 2000M
max_execution_time = 600

所以你现在将拥有...

在您再次访问该网站之前,最好放入一些基本主题文件,以便您的主题在您访问该网站和管理时运行...

For mailhog https://hub.docker.com/r/mailhog/mailhog/要工作并接收来自本地 WordPress 环境的外发邮件,您需要将其添加到您的functions.php...

// add the action
add_action('wp_mail_failed', 'action_wp_mail_failed', 10, 1);

// configure PHPMailer to send through SMTP
add_action('phpmailer_init', function ($phpmailer) {

    $phpmailer->isSMTP();
    // host details
    $phpmailer->SMTPAuth = WORDPRESS_SMTP_AUTH;
    $phpmailer->SMTPSecure = WORDPRESS_SMTP_SECURE;
    $phpmailer->SMTPAutoTLS = false;
    $phpmailer->Host = WORDPRESS_SMTP_HOST;
    $phpmailer->Port = WORDPRESS_SMTP_PORT;
    // from details
    $phpmailer->From = WORDPRESS_SMTP_FROM;
    $phpmailer->FromName = WORDPRESS_SMTP_FROM_NAME;
    // login details
    $phpmailer->Username = WORDPRESS_SMTP_USERNAME;
    $phpmailer->Password = WORDPRESS_SMTP_PASSWORD;

});

现在下面的这些网址就可以使用了...

  • http://locolhost http://locolhost- 你的网站
  • http://locolhost/admin http://localhost/admin- 您的网站 wp 管理员(网站设置后)
  • http://本地主机:8025 http://localhost:8025- mailhog 用于查看从站点发出的邮件

所以每次你docker-compose down and docker-compose up -d在此项目中,您的环境将在您停止的位置准确启动。

您可以添加数据库数据、上传和插件,所有这些数据都将是持久的,无需编辑核心文件。

您可以添加任何额外的wp-config.php设置到这个docker-compose.yml文件。但你需要docker-compose down and up -d以使这些配置生效。

这个主题文件夹名为testing在 docker 容器文件中,但是如果修改style.css文件包含以下代码,此激活的主题将显示在管理员中,并显示您设置的内容...

/*
Theme Name: Project Name
Author: joshmoto
Description: Project Description
Version: 1.0
License: Private
*/



按照你的评论。您可以尝试持久映射整个wp-content通过在现有的卷中使用它来从您的卷中docker-compose.yml...

  # here is our mysql container
  db:
    image: mysql:5.7
    volumes:
      - ./db:/var/lib/mysql:delegated

  # here is our wordpress container
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - ./wp-content:/var/www/html/wp-content
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

您可能需要使用持久性db映射和uploads.ini如果您希望本地环境使用与上一个会话相同的主题设置和数据重新启动,仍然如此。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Docker 中使用卷访问容器文件系统 的相关文章

随机推荐