首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker-使用Commandbox编写无法更改web根

Docker-使用Commandbox编写无法更改web根
EN

Stack Overflow用户
提问于 2022-02-24 06:26:12
回答 1查看 238关注 0票数 3

我使用docker-compose来启动命令盒、幸运容器和mysql。

我想更改lucee服务器的web根目录,以隐藏所有非公共文件(server.json等,cf迁移资源文件夹)。

我跟踪了文档并更新了我的server.json https://commandbox.ortusbooks.com/embedded-server/server.json/packaging-your-server

代码语言:javascript
复制
{
    "web":{
        "webroot":"./public"
    }
}

如果我从Windows启动服务器(从应用程序文件夹启动box start),服务器将从./publichttp://localhost加载我的index.cfm,非常好。

但是使用这个.yaml文件,webroot不会更改为./public,并显示我的/app文件夹的内容,目录列表中可以看到“公共”文件夹。

代码语言:javascript
复制
services:
  db:
    image: mysql:8.0.26
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
      MYSQL_DATABASE: cf
      MYSQL_USER: $MYSQL_USER
      MYSQL_PASSWORD: $MYSQL_PASSWORD
      MYSQL_SOURCE: $MYSQL_SOURCE
      MYSQL_SOURCE_USER: $MYSQL_SOURCE_USER
      MYSQL_SOURCE_PASSWORD: $MYSQL_SOURCE_PASSWORD
    volumes:
      - ./mysql:/var/lib/mysql
      - ./assets/initdb:/docker-entrypoint-initdb.d
      - ./assets/sql:/assets/sql

  web:
    depends_on:
      - db
    # Post 3.1.0 fails to boot if APP_DIR is set to non /app
    # image: ortussolutions/commandbox:lucee5-3.1.0
    image: ortussolutions/commandbox:lucee5
    # build: .
    ports:
      - "80:80"
      - "443:443"
    environment:
        - PORT=80
        - SSL_PORT=443
        - BOX_SERVER_WEB_SSL_ENABLE=true
        - BOX_SERVER_WEB_DIRECTORYBROWSING=$CF_DIRECTORY_BROWSING
        - BOX_INSTALL=true
        - BOX_SERVER_WEB_BLOCKCFADMIN=$CF_BLOCK_ADMIN
        - BOX_SERVER_CFCONFIGFILE=/app/.cfconfig.json 
        
        # - APP_DIR=/app/public
        # - BOX_SERVER_WEB_WEBROOT=/app/public
        
        - cfconfig_robustExceptionEnabled=$CF_ROBOUST_EXCEPTION_ENABLED
        - cfconfig_adminPassword=$CF_ADMIN_PASSWORD

        - MYSQL_USER=$MYSQL_USER
        - MYSQL_PASSWORD=$MYSQL_PASSWORD
        - MYSQL_HOST=$MYSQL_HOST
        - MYSQL_PORT=$MYSQL_PORT
    volumes:
      - ./app:/app
      - ./assets/mysql-connector-java-8.0.26.jar:/usr/local/lib/CommandBox/lib/mysql-connector-java-8.0.26.jar

下面是目录清单:

这是我的项目结构:

看起来server.json文件被忽略了,或者至少是web.webroot属性,但是我尝试了这两个设置,但都没有解决问题。

代码语言:javascript
复制
- APP_DIR=/app/public
- BOX_SERVER_WEB_WEBROOT=/app/public

命令盒文档建议将APP_DIR更改为修复web根目录"APP_DIR -应用程序目录(web )“https://hub.docker.com/r/ortussolutions/commandbox/

但是,如果我这样做,我会得到一个错误的启动脚本在错误的地方,在我看来,它应该被修复:https://github.com/Ortus-Solutions/docker-commandbox/issues/55

BOX_SERVER_WEB_WEBROOTserver.json一样(或者至少是那个属性)。我也尝试过设置以下env (大写和小写),它没有区别,但请记住,server.json为我更改了webroot

  • BOX_SERVER_WEB_WEBROOT=./public
  • BOX_SERVER_WEB_WEBROOT=/app/public
  • BOX_SERVER_WEB_WEBROOT=public

web容器启动时的输出:

代码语言:javascript
复制
Set verboseErrors = true

INFO: CF Engine defined as lucee@5.3.8+189

INFO: Convention .cfconfig.json found at /app/.cfconfig.json

INFO: Server Home Directory set to: /usr/local/lib/serverHome

 √ | Installing ALL dependencies

   | √ | Installing package [forgebox:commandbox-cfconfig@1.6.3]

   | √ | Installing package [forgebox:commandbox-migrations@3.2.3]

   |   | √ | Installing package [forgebox:cfmigrations@^2.0.0]

   |   |   | √ | Installing package [forgebox:qb@^8.0.0]

   |   |   |   | √ | Installing package [forgebox:cbpaginator@^2.4.0]

+ [[ -n '' ]]

+ [[ -n '' ]]

INFO: Generating server startup script

 √ | Starting Server

   |------------------------------

   | start server in - /app/

   | server name - app

   | server config file - /app//server.json

   | WAR/zip archive already installed.

   | Found CFConfig JSON in ".cfconfig.json" file in web root by convention

   | .

   | Importing luceeserver config from [/app/.cfconfig.json]

   | Config transferred!

   | Setting OS environment variable [cfconfig_adminPassword] into luceeser

   | ver

   | [adminPassword] set.

   | Setting OS environment variable [cfconfig_robustExceptionEnabled] into

   |  luceeserver

   | [robustExceptionEnabled] set.

   | Start script for shell [bash] generated at: /app/server-start.sh

   | Server start command: 

   |     /opt/java/openjdk/bin/java 

   |     -jar /usr/local/lib/CommandBox/lib/runwar-4.5.1.jar 

   |     --background=false 

   |     --host 0.0.0.0 

   |     --stop-port 42777 

   |     --processname app [lucee 5.3.8+189] 

   |     --log-dir /usr/local/lib/serverHome//logs 

   |     --server-name app 

   |     --tray-enable false 

   |     --dock-enable true 

   |     --directoryindex true 

   |     --timeout 240 

   |     --proxy-peeraddress true 

   |     --cookie-secure false 

   |     --cookie-httponly false 

   |     --pid-file /usr/local/lib/serverHome//.pid.txt 

   |     --gzip-enable true 

   |     --cfengine-name lucee 

   |     -war /app/ 

   |     --web-xml-path /usr/local/lib/serverHome/WEB-INF/web.xml 

   |     --http-enable true 

   |     --ssl-enable true 

   |     --ajp-enable false 

   |     --http2-enable true 

   |     --open-browser false 

   |     --open-url https://0.0.0.0:443 

   |     --port 80 

   |     --ssl-port 443 

   |     --urlrewrite-enable false 

   |     --predicate-file /usr/local/lib/serverHome//.predicateFile.txt

   | Dry run specified, exiting without starting server.

   |------------------------------

   | √ | Setting Server Profile to [production]

   |   |-----------------------------------------------------

   |   | Profile set from secure by default

   |   | Block CF Admin disabled

   |   | Block Sensitive Paths enabled

   |   | Block Flash Remoting enabled

   |   | Directory Browsing enabled

   |   |-----------------------------------------------------

INFO: Starting server using generated script: /usr/local/bin/startup.sh

[INFO ] runwar.server: Starting RunWAR 4.5.1

[INFO ] runwar.server: HTTP2 Enabled:true

[INFO ] runwar.server: Enabling SSL protocol on port 443

[INFO ] runwar.server: HTTP ajpEnable:false

[INFO ] runwar.server: HTTP warFile exists:true

[INFO ] runwar.server: HTTP warFile isDirectory:true

[INFO ] runwar.server: HTTP background:false

[INFO ] runwar.server: Adding additional lib dir of: /usr/local/lib/serverHome/WEB-INF/lib

[INFO ] runwar.server: ******************************************************************************

[INFO ] runwar.server: Starting - port:80 stop-port:42777 warpath:file:/app/

[INFO ] runwar.server: context: /  -  version: 4.5.1

[INFO ] runwar.server: web-dirs: ["\/app"]

[INFO ] runwar.server: Log Directory: /usr/local/lib/serverHome/logs

[INFO ] runwar.server: ******************************************************************************

[INFO ] runwar.server: XNIO-Option CONNECTION_LOW_WATER:1000000

[INFO ] runwar.server: XNIO-Option CORK:true

[INFO ] runwar.server: XNIO-Option WORKER_TASK_MAX_THREADS:30

[INFO ] runwar.server: XNIO-Option WORKER_IO_THREADS:8

[INFO ] runwar.server: XNIO-Option TCP_NODELAY:true

[INFO ] runwar.server: XNIO-Option WORKER_TASK_CORE_THREADS:30

[INFO ] runwar.server: XNIO-Option CONNECTION_HIGH_WATER:1000000

[INFO ] runwar.config: Parsing '/usr/local/lib/serverHome/WEB-INF/web.xml'

[INFO ] runwar.server: Extensions allowed by the default servlet for static files: 3gp,3gpp,7z,ai,aif,aiff,asf,asx,atom,au,avi,bin,bmp,btm,cco,crt,css,csv,deb,der,dmg,doc,docx,eot,eps,flv,font,gif,hqx,htc,htm,html,ico,img,ini,iso,jad,jng,jnlp,jpeg,jpg,js,json,kar,kml,kmz,m3u8,m4a,m4v,map,mid,midi,mml,mng,mov,mp3,mp4,mpeg,mpeg4,mpg,msi,msm,msp,ogg,otf,pdb,pdf,pem,pl,pm,png,ppt,pptx,prc,ps,psd,ra,rar,rpm,rss,rtf,run,sea,shtml,sit,svg,svgz,swf,tar,tcl,tif,tiff,tk,ts,ttf,txt,wav,wbmp,webm,webp,wmf,wml,wmlc,wmv,woff,woff2,xhtml,xls,xlsx,xml,xpi,xspf,zip,aifc,aac,apk,bak,bk,bz2,cdr,cmx,dat,dtd,eml,fla,gz,gzip,ipa,ia,indd,hey,lz,maf,markdown,md,mkv,mp1,mp2,mpe,odt,ott,odg,odf,ots,pps,pot,pmd,pub,raw,sdd,tsv,xcf,yml,yaml

[INFO ] runwar.server: welcome pages in deployment manager: [index.cfm, index.lucee, index.html, index.htm]

WARNING: An illegal reflective access operation has occurred

WARNING: Illegal reflective access by org.apache.felix.framework.ext.ClassPathExtenderFactory$DefaultClassLoaderExtender (file:/usr/local/lib/serverHome/WEB-INF/lib/lucee.jar) to method java.net.URLClassLoader.addURL(java.net.URL)

WARNING: Please consider reporting this to the maintainers of org.apache.felix.framework.ext.ClassPathExtenderFactory$DefaultClassLoaderExtender

WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations

WARNING: All illegal access operations will be denied in a future release

[INFO ] runwar.server: Direct Buffers: true

[INFO ] runwar.server: ******************************************************************************

[INFO ] runwar.server: *** starting 'stop' listener thread - Host: 0.0.0.0 - Socket: 42777

[INFO ] runwar.server: ******************************************************************************

[INFO ] runwar.server: Server is up - http-port:80 https-port:443 stop-port:42777 PID:286 version 4.5.1

这对我来说是很新的,所以我可能做了一些完全错误的事情,我想知道这是否是文件夹嵌套的问题,尽管我尝试过重新安排它,但无法想出一个有效的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-24 14:56:24

你用的是预先加热的图像

代码语言:javascript
复制
image: ortussolutions/commandbox:lucee5

这意味着服务器已经启动并“锁定”到其所有设置,包括web根目录。使用从未启动过服务器的vanilla命令盒映像,这样,当您将映像热身时,您将第一次使用您的设置启动它。

要设置自定义web根目录,您需要将其添加到您的docker文件中

代码语言:javascript
复制
ENV APP_DIR=/app/public
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71247957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档