Docker挂载仅适用于localhost

时间:2017-01-25 17:56:59

标签: linux ssl nginx docker .net-core

我想用docker创建安装。我有dotnet应用程序,我想在其中安装带有自我signet ssl证书的certs文件夹。在localhost上运行良好,但在我的VPS(我有root权限)上没有。

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

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"]

我的码头撰写文件:

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

我有以下结构:

在我的电脑中:

 - /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 save/load

在localhost上,所有工作文件,运行docker compose后,从nginx-proxy文件夹,但在远程服务器上,我得到了这个:

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
  

应用程序中没有此类文件意味着远程PC中不存在证书文件

当我从远程机器文件夹中删除到mount时,会在创建后创建。这很有趣。

这是我的远程结构上的ls- l commnad:

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

和nginx-proxy(我的docker启动文件夹):

drwxrwxrwx 2 root root 4096 Jan 25 18:03 certs
-rw-r--r-- 1 root root  883 Jan 25 18:03 docker-compose.yml

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

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

0 个答案:

没有答案