Docker compose 容器中的空文件,使用docker compose with volumes初始化现有文件的映像

Docker compose 容器中的空文件,使用docker compose with volumes初始化现有文件的映像,docker-compose,Docker Compose,我正在尝试使用现有的配置文件初始化容器。我拥有的文件是nginx.conf和ssl.conf。卷配置设置如下: volumes: - ./nginxletsencrypt_config:/config - ./nginxConfig/nginx.conf:/config/nginx/site-confs/default - ./nginxConfig/ssl.conf:/config/nginx/ssl.conf 这个结果是“default”和ssl.con

我正在尝试使用现有的配置文件初始化容器。我拥有的文件是nginx.conf和ssl.conf。卷配置设置如下:

volumes:
      - ./nginxletsencrypt_config:/config
      - ./nginxConfig/nginx.conf:/config/nginx/site-confs/default
      - ./nginxConfig/ssl.conf:/config/nginx/ssl.conf
这个结果是“default”和ssl.conf文件,它们具有root:root所有者,甚至被标记为可执行文件。如果我只放第一行,并注释掉nginx.conf和ssl.conf的另外两行,那么图像中就有这两个文件,其中包含它们的默认内容。 完整的docker compose文件是:

version: '2'
services:
    nginx:
        restart: always
        image: linuxserver/letsencrypt
        container_name: nginx
        ports:
          - 443:443
          - 80:80
        cap_add:
          - NET_ADMIN
        environment:
          - HOST_HOSTNAME=prod
          - PUID=1001 # get on dockerhost through command "id <user>"
          - PGID=1002
          - TZ=Europe/London
          - URL=domainname.com
          - VALIDATION=http
          - EMAIL=contact@email.fr
          - STAGING=false
        volumes:
          - ./nginxletsencrypt_config:/config
          - ./nginxConfig/nginx.conf:/config/nginx/site-confs/default
          - ./nginxConfig/ssl.conf:/config/nginx/ssl.conf
=============================================

将docker更新至最新版本并在clear Environment上测试后(以前未安装旧的docker):

表示“默认”文件不为空。然后文件被复制了。但为什么我不能将其与

cat ./nginxletsencrypt_config/nginx/site-confs/default


所以我可以复制你的问题

$cat nginxletsencrypt\u config/nginx/site confs/default
$ls-ialh nginxletsencrypt\u config/nginx/site confs/default
23518410-rwxr-xr-x 1 tarunlalwani staff 0B Jul 9 12:37 nginxletsencrypt_config/nginx/site confs/default
$ls-ialh nginxConfig/nginx.conf
23492731-rw-rw-r--@1 tarunlalwani staff 22B Jul 8 13:14 nginxConfig/nginx.conf
$docker compose exec nginx sh
root@9d6d58328d33:/#ls-alhi-config/nginx/site-confs/default
23492731-rw-rw-r--1 abc abc 22 Jul 8 08:44 config/nginx/site confs/default
root@9d6d58328d33:/#
正如您所看到的,
nginxletsencrypt\u config
中的
inode
是不同的,因此它是一个空白文件。我的直觉是,这是因为容器中的文件系统层


这是docker的一个错误吗?可能是的,或者这可能是一种特殊情况,需要更深入地理解为什么会发生这种情况

My be您将在无法使用
docker compose
1.23.2版进行复制时获得更多帮助。当容器启动时,卷按预期工作,文件也在其中。是否有任何特殊原因导致您在
docker compose
文件顶部省略了
version
?另外,请确保卷部分中的主机路径有效(无误)。因此,您不需要
root:root
permissions?@TarunLalwani root:root,如果文件正确复制且内容在其中,则不会出现问题。目前它们是空的。我想根用户就是问题所在。这些文件可能首先是从具有根所有者的容器中创建的,然后作为另一个用户运行对这些文件的写入。虽然我不明白为什么文件首先创建为空,而不是直接与内容一起复制。@makkasi,我在Ubuntu 16.04上尝试过,但无法重现您的问题,请参见屏幕截图
krasen@test:~$ docker version
Client:
 Version:           18.09.7
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        2d0083d
 Built:             Thu Jun 27 17:57:09 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.7
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       2d0083d
  Built:            Thu Jun 27 17:23:02 2019
  OS/Arch:          linux/amd64
  Experimental:     false

krasen@test:~/test$ pwd
/home/krasen/test
krasen@test:~/test$ cat docker-compose.yml 
version: '2'
services:
  nginx:
    restart: always
    image: linuxserver/letsencrypt
    container_name: nginx
    ports:
      - 443:443
      - 80:80
    cap_add:
      - NET_ADMIN
    environment:
      - HOST_HOSTNAME=prod
      - PUID=1001 # get on dockerhost through command "id <user>"
      - PGID=1002
      - TZ=Europe/Paris
      - URL=test.net
      - VALIDATION=http
      - EMAIL=test@test.fr
    user: ${CURRENT_UID}
    volumes:
      - ./nginxletsencrypt_config:/config
      - ./nginxConfig/nginx.conf:/config/nginx/site-confs/default
      - ./nginxConfig/ssl.conf:/config/nginx/ssl.conf

krasen@test:~/test$ ls 
docker-compose.yml  Dockerfile  nginxConfig  nginxletsencrypt_config
krasen@test:~/test$ ls nginxConfig/
nginx.conf  ssl.conf
krasen@test:~/test$ ls -la nginxConfig/
total 16
drwxrwxr-x 2 krasen krasen 4096 Jul  8 09:06 .
drwxrwxr-x 4 krasen krasen 4096 Jul  8 09:09 ..
-rw-rw-r-- 1 krasen krasen 1500 Jul  8 09:06 nginx.conf
-rw-rw-r-- 1 krasen krasen 1405 Jul  8 09:06 ssl.conf
krasen@test:~/test$ ls -la nginxletsencrypt_config/
total 48
drwxrwxr-x 11 krasen krasen 4096 Jul  8 09:07 .
drwxrwxr-x  4 krasen krasen 4096 Jul  8 09:09 ..
drwxr-xr-x  2 krasen krasen 4096 Jul  8 09:07 crontabs
-rw-rw-r--  1 krasen krasen    0 Jul  8 09:07 .directory
drwxr-xr-x  2 krasen krasen 4096 Jul  8 09:07 dns-conf
-rw-r--r--  1 krasen krasen  204 Jul  8 09:07 donoteditthisfile.conf
drwxr-xr-x  3 krasen krasen 4096 Jul  8 09:07 etc
drwxr-xr-x  4 krasen krasen 4096 Jul  8 09:07 fail2ban
drwxr-xr-x  2 krasen krasen 4096 Jul  8 09:07 keys
drwxr-xr-x  6 krasen krasen 4096 Jul  8 09:07 log
drwxrwxr-x  4 krasen krasen 4096 Jul  8 09:07 nginx
drwxr-xr-x  2 krasen krasen 4096 Jul  8 09:07 php
drwxrwxr-x  2 krasen krasen 4096 Jul  8 09:07 www
krasen@test:~/test$ ls -la nginxletsencrypt_config/nginx/
total 44
drwxrwxr-x  4 krasen krasen  4096 Jul  8 09:07 .
drwxrwxr-x 11 krasen krasen  4096 Jul  8 09:07 ..
-rw-rw-r--  1 krasen krasen   424 Jul  8 09:07 dhparams.pem
-rw-rw-r--  1 krasen krasen  4140 Jul  8 09:07 ldap.conf
-rw-rw-r--  1 krasen krasen  1832 Jul  8 09:07 nginx.conf
-rw-rw-r--  1 krasen krasen  1019 Jul  8 09:07 proxy.conf
drwxrwxr-x  2 krasen krasen 12288 Jul  8 09:07 proxy-confs
drwxrwxr-x  2 krasen krasen  4096 Jul  8 09:07 site-confs
krasen@test:~/test$ ls -la nginxletsencrypt_config/nginx/site-confs/
total 8
drwxrwxr-x 2 krasen krasen 4096 Jul  8 09:07 .
drwxrwxr-x 4 krasen krasen 4096 Jul  8 09:07 ..
krasen@test:~/test$ docker-compose build 
nginx uses an image, skipping
krasen@test:~/test$ docker-compose -f docker-compose.yml up -d
Creating network "test_default" with the default driver
Pulling nginx (linuxserver/letsencrypt:latest)...
latest: Pulling from linuxserver/letsencrypt
2430498be9ad: Pull complete
ab781ac10f2e: Pull complete
365f82032c47: Pull complete
c3805ea8a362: Pull complete
6e0559b48e8a: Pull complete
5ecfcf110062: Pull complete
7aee6d88249e: Pull complete
Digest: sha256:9ad0d0d48a9f7e784569cbecef95b753a87133574140f9e3ee790dc9ee7f3d8a
Status: Downloaded newer image for linuxserver/letsencrypt:latest
Creating nginx ... done
krasen@test:~/test$ ls ./nginxletsencrypt_config/
crontabs/               dns-conf/               etc/                    keys/                   nginx/                  www/                    
.directory              donoteditthisfile.conf  fail2ban/               log/                    php/                    
krasen@test:~/test$ ls ./nginxletsencrypt_config/nginx/
dhparams.pem  ldap.conf  nginx.conf  proxy.conf  proxy-confs  site-confs  ssl.conf
krasen@test:~/test$ ls -la ./nginxletsencrypt_config/nginx/
total 44
drwxrwxr-x  4 krasen krasen  4096 Jul  8 09:12 .
drwxrwxr-x 11 krasen krasen  4096 Jul  8 09:07 ..
-rw-rw-r--  1 krasen krasen   424 Jul  8 09:07 dhparams.pem
-rw-rw-r--  1 krasen krasen  4140 Jul  8 09:07 ldap.conf
-rw-rw-r--  1 krasen krasen  1832 Jul  8 09:07 nginx.conf
-rw-rw-r--  1 krasen krasen  1019 Jul  8 09:07 proxy.conf
drwxrwxr-x  2 krasen krasen 12288 Jul  8 09:07 proxy-confs
drwxrwxr-x  2 krasen krasen  4096 Jul  8 09:12 site-confs
-rwxr-xr-x  1 root   root       0 Jul  8 09:12 ssl.conf
krasen@test:~/test$ cat  ./nginxletsencrypt_config/nginx/ssl.conf
krasen@test:~/test$ cat ./nginxConfig/ssl.conf
## Version 2018/05/31 - Changelog: https://github.com/linuxserver/docker-letsencrypt/commits/master/root/defaults/ssl.conf

# session settings
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# Diffie-Hellman parameter for DHE cipher suites
ssl_dhparam /config/nginx/dhparams.pem;

# ssl certs
ssl_certificate /config/keys/letsencrypt/fullchain.pem;
ssl_certificate_key /config/keys/letsencrypt/privkey.pem;

# protocols
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers '............................................................................................................................................................';

# HSTS, remove # from the line below to enable HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;

krasen@test:~/test$
nginx    | nginx: [emerg] host not found in upstream "web:8000" in /config/nginx/site-confs/default:2
cat ./nginxletsencrypt_config/nginx/site-confs/default
sudo cat ./nginxletsencrypt_config/nginx/site-confs/default