Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Docker装载仅在本地主机上工作_Linux_Ssl_Nginx_Docker_.net Core - Fatal编程技术网

Linux Docker装载仅在本地主机上工作

Linux Docker装载仅在本地主机上工作,linux,ssl,nginx,docker,.net-core,Linux,Ssl,Nginx,Docker,.net Core,我想用docker创建挂载。我有一个dotnet应用程序,我想在其中安装带有self-signet ssl证书的certs文件夹。在本地主机上,它工作得很好,但在我的VPS上(我有根权限)却不行 我在远程计算机上的操作系统: No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.6 (jessie) Release: 8.6 Codename: jessie 只

我想用docker创建挂载。我有一个dotnet应用程序,我想在其中安装带有self-signet ssl证书的certs文件夹。在本地主机上,它工作得很好,但在我的VPS上(我有根权限)却不行

我在远程计算机上的操作系统:

No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.6 (jessie)
Release:    8.6
Codename:   jessie 
只需应用程序中的docker文件:

FROM microsoft/dotnet:latest

WORKDIR /app

COPY out .

EXPOSE 5000/tcp 5001/tcp

ENTRYPOINT ["dotnet", "myapp.dll"]
我的docker撰写文件:

version: '2'
services:    
  # mssql:
  #   image: iws/mssql
  #   container_name: mssql-server    
  #   ports:
  #     - "1433:1433"

  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:      
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./certs:/etc/nginx/certs

  myapp:
    image: iws/cestujnakole
    container_name: myapp          
    environment:
      - VIRTUAL_HOST=cestujnakole.cz,www.cestujnakole.cz
    volumes: 
      - ./certs:/app/certs
      - ../myapp/wwwroot:/app/wwwroot
我的结构如下:

ls -l
total 16
drwxrwxrwx 4 root root 4096 Jan 25 17:58 myapp
drwxr-xr-x 3 root root 4096 Jan 20 13:02 mysql
drwxr-xr-x 4 root root 4096 Jan 25 16:50 nginx-proxy
在我的电脑中:

 - /Users/me/projects
   - nginx-proxy
     - docker-compose.yml
     - certs
       - myapp.pfs
       - myapp.key
       - etc.
   - myapp
     - out
     - Dockerfile
在我的VPS中:

 - /var/www/projects
   - nginx-proxy
     - docker-compose.yml
     - certs
       - myapp.pfs
       - myapp.key
       - etc.
   - myapp
   - etc.         
在我的应用程序中,我需要读取certs/myapp.pfs文件。当文件不存在时,应用程序将崩溃

到vps我加载成品容器(
docker保存/加载

在本地主机上运行docker compose up后,从nginx proxy文件夹运行everything works file,但在远程服务器上,我得到以下信息:

docker-compose up --force-recreate cestujnakole
Recreating cestujnakole
Attaching to cestujnakole
cestujnakole    | Running Environment: Production
cestujnakole    | 
cestujnakole    | Unhandled Exception: Interop+Crypto+OpenSslCryptographicException: error:2006D080:BIO routines:BIO_new_file:no such file
cestujnakole    |    at Interop.Crypto.CheckValidOpenSslHandle(SafeHandle handle)
cestujnakole    |    at Internal.Cryptography.Pal.CertificatePal.FromFile(String fileName, String password, X509KeyStorageFlags keyStorageFlags)
cestujnakole    |    at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(String fileName, String password, X509KeyStorageFlags keyStorageFlags)
cestujnakole    |    at Microsoft.AspNetCore.Hosting.KestrelServerOptionsHttpsExtensions.UseHttps(KestrelServerOptions options, String fileName, String password)
cestujnakole    |    at Microsoft.Extensions.Options.OptionsCache`1.CreateOptions()
cestujnakole    |    at System.Threading.LazyInitializer.EnsureInitializedCore[T](T& target, Boolean& initialized, Object& syncLock, Func`1 valueFactory)
cestujnakole    |    at Microsoft.AspNetCore.Server.Kestrel.KestrelServer..ctor(IOptions`1 options, IApplicationLifetime applicationLifetime, ILoggerFactory loggerFactory)
cestujnakole    | --- End of stack trace from previous location where exception was thrown ---
cestujnakole    |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
cestujnakole    |    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
cestujnakole    |    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
cestujnakole    |    at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider)
cestujnakole    |    at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
cestujnakole    |    at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
cestujnakole    |    at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureServer()
cestujnakole    |    at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
cestujnakole    |    at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
cestujnakole    |    at CykloWeb.Program.Main(String[] args) in /Users/petrtomasek/projects/CykloWeb/Program.cs:line 22
cestujnakole exited with code 139
和nginx代理(我的docker启动文件夹):

在777之后,我测试了nginx代理文件夹chmod-R和775,但没有任何帮助

问题出在哪里?
谢谢您的时间。

您是否尝试过在没有docker compose的情况下手动运行它,以查看发生了什么情况?是的,我已经测试过了。同样的问题。我认为,问题在于远程文件夹的权限,因为在我的mac电脑中,我把它放在主目录中,并且运行良好。是的,当您尝试从不同平台访问证书文件时,文件磁盘格式似乎有问题,例如在共享windows磁盘上的linux主机上运行docker容器。这是我的案子。我通过处理直接在linux主机(非windows共享)文件夹中创建的旧证书解决了此问题。请查看我的答案。您是否尝试在没有docker compose的情况下手动运行它以查看结果?是的,我测试了此项。同样的问题。我认为,问题在于远程文件夹的权限,因为在我的mac电脑中,我把它放在主目录中,并且运行良好。是的,当您尝试从不同平台访问证书文件时,文件磁盘格式似乎有问题,例如在共享windows磁盘上的linux主机上运行docker容器。这是我的案子。我通过处理直接在linux主机(非windows共享)文件夹中创建的旧证书解决了这个问题。请在这里查看我的答案
drwxrwxrwx 2 root root 4096 Jan 25 18:03 certs
-rw-r--r-- 1 root root  883 Jan 25 18:03 docker-compose.yml