gpt4 book ai didi

docker - 为什么将此卷挂载为只读?

转载 作者:行者123 更新时间:2023-12-02 21:31:03 26 4
gpt4 key购买 nike

我从这个链接https://hub.docker.com/_/wordpress得到了一个像这样的docker-compose.yml文件。

version: '3.1'

services:

wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html

db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql

volumes:
wordpress:
db:
但是该卷未安装在wordpress文件夹上,并且如果我删除“wordpress”以将该卷安装在本地文件夹上,它将被安装,但它是只读的。我没有Dockerfile,我只是使用默认镜像,这就是问题所在吗?

最佳答案

我一直在使用docker进行wordpress,这是我的工作流程。(在Mac上)
创建一个项目文件夹,并为此添加一个docker-compose.yml文件。

version: '3.7'

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

# 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
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');

/* Configure mailhog 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', 'whoever@example.com');
define('WORDPRESS_SMTP_FROM_NAME', 'Whoever');

/* other wp-config defines here */

# here is our mailhog container
mailhog:
image: mailhog/mailhog:latest
ports:
- "8025:8025"
然后在此项目文件夹中运行此终端命令(运行docker app)。
docker-compose up -d
..and bam,您将在 http://localhost/上拥有一个wordpress网站
已配置此 docker-compose.yml,因此您将拥有。
  • 位于http:// localhost /或http:// localhost:80的Wordpress网站
  • Mailhog服务器,用于捕获位于http:// localhost:8025 /
  • 的所有传出邮件
  • 永久本地数据库,插件,上载和uploads.ini

  • 所有持久数据都映射到该项目文件夹,即您的主题文件夹。这样可以使事情保持良好状态并为每个项目收集。
    enter image description here
    在完成初始构建之后,您需要执行任何操作,然后用实际的 uploads.ini文件替换 uploads.ini文件夹。
    file_uploads = On
    memory_limit = 2000M
    upload_max_filesize = 2000M
    post_max_size = 2000M
    max_execution_time = 600
    因此,您的项目(主题)文件夹应如下所示。
    enter image description here
    现在,您可以像这样在此文件夹中开始构建主题,并在此处保留与此本地环境关联的所有内容。
    enter image description here
    每次运行此命令以关闭环境。
    docker-compose down
    下次您在此项目上运行此命令时。
    docker-compose up -d
    ..您以前所有的数据库,插件和上载都将完全保留,对于wordpress本地开发人员来说真是太棒了!

    要考虑的一些注意事项

    在此本地wordpress项目中使用GIT
    如果您使用GIT将该项目另存为存储库,请确保 .gitignore文件排除了这些文件/文件夹。
    /vendor
    /uploads
    /db
    /dist
    /node_modules
    /plugins
    值得在硬盘驱动器故障或其他情况下为 /db/plugins/uploads文件夹设置备用云备份解决方案,例如Google驱动器。

    部署到服务器 stagingproduction在此项目的IDE设置中,您可能希望将某些文件和文件夹排除在部署到 stagingproduction服务器环境之外,这是我通常所排除的。
    /Users/joshmoto/Sites/demo/db
    /Users/joshmoto/Sites/demo/node_modules
    /Users/joshmoto/Sites/demo/src
    /Users/joshmoto/Sites/demo/uploads
    /Users/joshmoto/Sites/demo/composer.json
    /Users/joshmoto/Sites/demo/composer.lock
    /Users/joshmoto/Sites/demo/docker-compose.yml
    /Users/joshmoto/Sites/demo/package-lock.json
    /Users/joshmoto/Sites/demo/package.json
    /Users/joshmoto/Sites/demo/uploads.ini
    /Users/joshmoto/Sites/demo/webpack.mix.js
    /Users/joshmoto/Sites/demo/plugins
    /Users/joshmoto/Sites/demo/.gitignore
    /Users/joshmoto/Sites/demo/vendor
  • /plugins我通过通过cPanel或wordpress仪表板上载进行手动管理,因为在同步到远程时索引非常繁重。
  • /vendors是由 Composer 生成的,并且存在相同的问题,索引很疯狂,因此最好手动将其压缩并通过cPanel或您使用的任何服务器管理员上载。


  • 如果您在通过wordpress仪表板本地上传媒体和插件时遇到问题
    有时,dockers wordpress容器 wp-content文件夹可能会遇到一些权限问题。这很容易解决。当您的项目在docker中启动并运行时,在项目中运行以下docker compose命令可更改 wp-content文件夹的权限。
    显示正在运行的Docker容器命令..
    docker ps
    返回结果
    CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                               NAMES
    4052536e574a wordpress:latest "docker-entrypoint.s…" 1 hour ago Up 1 hour 0.0.0.0:80->80/tcp demo_wordpress_1
    b0fbb0a8f9e6 mysql:5.7 "docker-entrypoint.s…" 1 hour ago Up 1 hour 0.0.0.0:3306->3306/tcp, 33060/tcp demo_db_1
    769262e584e7 mailhog/mailhog:latest "MailHog" 1 hour ago Up 1 hour 1025/tcp, 0.0.0.0:8025->8025/tcp demo_mailhog_1
    复制并记下 wordpress:latest容器ID,在此示例中,我的容器ID为..
    4052536e574a
    现在,使用此wordpress容器ID运行此命令以执行此容器目录中的内容。
    docker exec -it 4052536e574a /bin/bash
    返回结果
    root@4052536e574a:/var/www/html#
    现在我们在容器的根目录中,您现在可以运行此命令,该命令将递归地更改 wp-content上的权限,并解决本地wordpress仪表板中的上载权限问题。
    chown -R www-data:www-data wp-content
    为了使这些更改生效,您可能必须在项目文件夹上运行 docker-compose downdocker-compose up -d命令,但我认为您也不需要。

    如果要本地自定义URL而不是http:// localhost
    在终端(这次不在您的项目文件夹中)中,运行此命令以编辑您的主机文件。
    sudo nano /etc/hosts
    然后,在 WriteOut之前,通过终端和 Exit将自定义网址添加到主机文件中。
    127.0.0.1  local.demo.com
    现在,重定向掩码已保存在主机中,您需要将其添加到 docker-compose.yml下的 /* other wp-config defines here */中。
    define('WP_HOME','http://local.demo.com');
    define('WP_SITEURL','http://local.demo.com');
    不幸的是,您不能使用 https,而必须使用 http
    您需要 docker-compose downdocker-compose up -d才能使这些新定义的配置在本地 wp-config.php中运行。

    处理您的暂存和生产wp-config
    您的服务器环境应使用独特的盐等独立安装, 不应docker-compose.yml配置中获取任何东西,实际上您只想最初添加这些额外的定义。
    暂存 wp-config.php
    define('ENVIRONMENT', 'staging');
    define('WP_DEBUG', true);
    define('WP_HOME','https://staging.demo.com');
    define('WP_SITEURL','https://staging.demo.com');
    生产 wp-config.php
    define('ENVIRONMENT', 'production');
    define('WP_DEBUG', false);
    define('WP_HOME','https://www.demo.com');
    define('WP_SITEURL','https://www.demo.com');

    更新docker wordpress图片
    您无法通过wordpress仪表板更新本地wordpress网站。在我的 docker-compose.yml示例中,我定义了 image: wordpress:latest,该代码将获取安装在您的docker应用中的最新wordpress图像。
    这意味着如果您在当时使用旧版本wordpress的项目上 docker-compose up -d,则该项目将更新为docker上安装的最新wordpress镜像。
    我没有在 docker-compose.yml中亲自定义wordpress图像版本,但是如果您不希望某些项目在下一个 docker-compose up -d项目时使用最新图像,则可以。
    您必须使用此命令手动更新wordpress docker镜像。
    docker pull wordpress
    而且,您的项目必须使用 docker-compose downdocker-compose up -d才能使用最新的更新,当您首次通过浏览器访问该站点时,有时需要wordpress数据库更新。

    关于docker - 为什么将此卷挂载为只读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64473536/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com