作者:真实的阿凯123 | 来源:互联网 | 2022-12-12 19:26
刚开始在这里的码头工人
所以我在docker-compose.yml中得到了这个
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- 8000:80
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_TABLE_PREFIX: "wp_"
WORDPRESS_DEBUG: 1
wordpress-cli:
depends_on:
- db
- wordpress
image: wordpress:cli
command: wp core install --path="/var/www/html" --url=localhost --title="Local Wordpress By Docker" --admin_user=admin --admin_password=secret --admin_email=foo@bar.com
volumes:
db_data:
所以我想运行wp核心安装,以便我不必经历手动设置我的测试wordpress站点的过程.
但是当我运行docker-compose时,这似乎不起作用,我在控制台上遇到了这个错误
我在这里错过了什么?任何人都可以帮助我实现自动设置wordpress安装的目标吗?
提前致谢
1> vstm..:
那么有几个问题.第一个是这两个容器(wordpress
和wordpress-cli
)不共享卷.因此,虽然wordpress
已准备好wordpress安装,但wordpress-cli
事实并非如此.
因此,您可以向两个容器添加卷,然后wordpress-cli
将找到wordpress安装.
然后是第二个问题:wordpress:latest
和wordpress:cli
图像都与用户一起运行www-data
,但问题是各个www-data
用户具有不同的用户ID:
$ docker run --rm wordpress:latest grep www-data /etc/passwd
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
$ docker run --rm wordpress:cli grep www-data /etc/passwd
www-data:x:82:82:Linux User,,,:/home/www-data:/bin/false
看来它们在这里并不完全兼容.因此,如果您使用共享卷,则必须确保它们都使用相同的用户ID.我通过wordpress:cli
与xfs
具有用户ID 33的用户一起运行来解决这个问题.
最后一个问题是您的容器彼此依赖.Wordpress需要一个正在运行的MySQL实例,而wordpress-cli也需要MySQL和Wordpress准备就绪.为了确保MySQL已准备好进行wordpress cli安装,您可以使用类似"等待它"的东西,或者在简单的情况下,您可以等待几秒钟然后尝试它.
我测试了所有这些变化,并提出了以下建议docker-compose.yml
.我已经注释了我用"vstm"所做的所有更改:
version: "3.3"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- 8000:80
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_TABLE_PREFIX: "wp_"
WORDPRESS_DEBUG: 1
# vstm: add shared volume
volumes:
- wp_data:/var/www/html
wordpress-cli:
depends_on:
- db
- wordpress
image: wordpress:cli
# vstm: This is required to run wordpress-cli with the same
# user-id as wordpress. This way there are no permission problems
# when running the cli
user: xfs
# vstm: The sleep 10 is required so that the command is run after
# mysql is initialized. Depending on your machine this might take
# longer or it can go faster.
command: >
/bin/sh -c '
sleep 10;
wp core install --path="/var/www/html" --url="http://localhost:8000" --title="Local Wordpress By Docker" --admin_user=admin --admin_password=secret --admin_email=foo@bar.com
'
# vstm: add shared volume
volumes:
- wp_data:/var/www/html
volumes:
db_data:
# vstm: add shared volume
wp_data:
它使用docker-volume,但您也可以将其映射到文件系统.取决于您打算如何使用docker-compose.
我在答案中已经触及了xfs部分,但其中的要点是`wordpress:cli`图像中的xfs用户具有UID 33,这与`wordpress中的www-data用户的UID相同:最新的图像.让两个命令以相同的UID运行很重要,这样他们就可以在没有权限问题的情况下读/写共享卷(`wp_data`).