gpt4 book ai didi

linux - 从官方 Wordpress 图像挂载单个文件时,Docker (compose) 无法构建容器

转载 作者:太空狗 更新时间:2023-10-29 12:42:48 26 4
gpt4 key购买 nike

我遇到了挂载文件的问题,与工作正常的目录相反。具体问题相关Wordpress's official image和文件 wp-config.php(或任何其他)。

docker-compose.yml 文件的内容如下:

web:
image: wordpress
ports:
- "80:80"
volumes:
- ./src/wordpress/wp-content:/var/www/html/wp-content
- ./src/wordpress/wp-config.php:/var/www/html/wp-config.php
environment:
WORDPRESS_DB_NAME: dummyname
links:
- db:mysql
db:
image: mysql
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: dummypass

当我运行命令 docker-compose updocker run 输出是相同的:

WordPress not found in /var/www/html - copying now...
WARNING: /var/www/html is not empty - press Ctrl+C now if this is an error!
+ ls -A
wp-config.php
+ sleep 10
Complete! WordPress has been successfully copied to /var/www/html
sed: couldn't edit wp-config.php: not a regular file

在这两种情况下,wp-config.php/ 都被创建,但作为目录,而不是文件。

有时错误可能是:

ERROR: Cannot start container <container id>: [9] System error: not a directory

如果我注释正在安装 wp-config.php 文件的行,一切都会按预期工作。

docker inspect 给出正确的信息:

"HostConfig": {
"Binds": [
"/home/dummyuser/projects/dummyproject/src/wordpress/wp-config.php:/var/www/html/wp-config.php:rw"
],
...
"Mounts": [
{
"Source": "/home/dummyuser/projects/dummyproject/src/wordpress/wp-config.php",
"Destination": "/var/www/html/wp-config.php",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Name": "b8649d2edbfb043a05bce96622fbbc1c10b24b9f65736407efe961c3ec550b7a",
"Source": "/var/lib/docker/volumes/b8649d2edbfb043a05bce96622fbbc1c10b24b9f65736407efe961c3ec550b7a/_data",
"Destination": "/var/www/html",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],

环境:

Linux 3.19.0-56-generic #62~14.04.1-Ubuntu SMP Fri Mar 11 11:03:15 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Docker version 1.10.3, build 20f81dd
docker-compose version 1.5.2, build 7240ff3

我尝试过但没有得到任何结果的事情:

  • 使用 docker run 代替 docker-compose(相同的行为/结果)
  • 代替 ./src/wordpress 使用绝对路径,通过命名或使用 $PWD
  • 将项目移出 home 文件夹
  • 注释掉 wp-config.php 文件的 volume 行,创建容器,然后停止它,取消之前注释行的注释,然后重新启动它

不太确定,但在 entrypoint script 上观看时,如果在将 Wordpress tar 存档提取到/var/www/html 之前执行挂载,这可能是 wp-config.php 文件(或任何其他文件)无法找到并因此无法挂载的原因。使用目录,这似乎不是问题。

最佳答案

您可以尝试更灵活的方法,按如下方式构建您自己的图像:

在您的 docker-compose.yml 中:

web:
build: .
ports:
- "80:80"
volumes:
- ~/workspace/wordpress-dir:/var/www/html
environment:
WORDPRESS_DB_NAME: dummyname
links:
- db:mysql
db:
image: mysql
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: dummypass

然后在您 Dockerfile 的同一个文件夹中写入如下内容:

FROM wordpress

# Copying wp-content dir files
COPY src/wordpress/wp-content/* /var/www/html/wp-content/

之后你需要在up之前构建,以避免wordpress-entrypoint替换,只是第一次,如下:

docker-compose build
docker-compuse up

我认为这种构建容器的方式为您提供了更多的灵 active ,并且还为您的 wordpress 应用程序内容提供了真正的封装。

问候

关于linux - 从官方 Wordpress 图像挂载单个文件时,Docker (compose) 无法构建容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36074402/

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