为什么我的文件在Docker容器中不可用?

lx0bsm1f  于 12个月前  发布在  Docker
关注(0)|答案(1)|浏览(202)

我在一个M1 MacBook的Docker容器中运行nginx。
作为其中的一部分,我试图使一些letsencrypt证书可用。
在我的docker-compose文件中,

volumes:
  - ${PWD}/infrastructure/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  - ${PWD}/logs/nginx:/var/log/nginx:rw
  - /private/etc/letsencrypt/live:/etc/letsencrypt/live
  - ${PWD}/apps/fallback-server/static:/var/www/apps/fallback-server/static
  - ${PWD}/apps/server/data/static-apps:/var/www/apps/server/data/static-apps

字符串
当我启动容器时,我会看到以下内容(为了便于阅读而添加的换行符:

web-proxy-1  | nginx: [emerg] cannot load certificate
"/etc/letsencrypt/live/example.com/fullchain.pem": BIO_new_file() failed (SSL: 
error:80000002:system library::No such file or directory:calling 
fopen(/etc/letsencrypt/live/example.com/fullchain.pem, r) error:10000080:BIO routines::no such file)


请注意,没有关于丢失nginx.conf的投诉。
我的文件共享设置为包括/private
x1c 0d1x的数据
但是,错误消息和文件的此视图都表明文件尚未进入容器:



我所有的网上搜索往往指向指向文件共享的解决方案,但据我所知,这是正确的设置。
我接下来可以采取哪些步骤来解决这个问题?
我所有的网上搜索往往指向指向文件共享的解决方案,但据我所知,这是正确的设置。
值得注意的一点是,如果我运行服务web-proxy

docker compose run -i -t web-proxy /bin/sh


我能看到文件。
我接下来可以采取哪些步骤来解决这个问题?

rn0zuynd

rn0zuynd1#

事实证明,有几件事正在发生。
首先,live/中的文件是../../archive/的软符号链接,因此如果不挂载该目录,它们将无法工作。
第二,这些文件是由具有高度限制权限的root用户拥有的。由于我以非root用户的身份运行Docker,因此该进程无法访问这些文件。
解决方案(在这种特定情况下)是以运行Docker的同一用户身份运行certbot

相关问题