我正在努力构建一个源自官方 jboss/wildfly 图像的自定义图像。
如果我只添加 .war 文件并运行,它工作得很好,但是当我尝试添加自定义 standalone-full.xml 文件时出现问题
这是我的 Dockerfile:
FROM jboss/wildfly:10.1.0.Final
COPY standalone-full.xml /opt/jboss/wildfly/standalone/configuration/standalone-full.xml
COPY sample.war /opt/jboss/wildfly/standalone/deployments/
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-c", "standalone-full.xml", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]
这是我的源目录:
link to screenshot of ls -la command inside the source directory
按照建议,我已将 standalone-full.xml 文件授予 755 权限。
但是,在使用以下命令构建图像之后:
docker build -t sample-app .
并按如下方式运行图像:
docker run -it -p 8080:8080 -p 80:80 -p 443:443 sample-app
我收到以下错误:
13:18:06,274 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.undertow.listener.default: org.jboss.msc.service.StartException in service jboss.undertow.listener.default: WFLYUT0082: Could not start 'default' listener.
at org.wildfly.extension.undertow.ListenerService.start(ListenerService.java:153)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketException: Permission denied
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at org.xnio.nio.NioXnioWorker.createTcpConnectionServer(NioXnioWorker.java:190)
at org.xnio.XnioWorker.createStreamConnectionServer(XnioWorker.java:243)
at org.wildfly.extension.undertow.HttpListenerService.startListening(HttpListenerService.java:126)
at org.wildfly.extension.undertow.ListenerService.start(ListenerService.java:142)
我执行到正在运行的容器中以查看独立文件的文件权限:
如果我在运行 CMD 指令之前将用户更改为 root,我可以让应用程序运行,但我认为这不是一个好的做法:
FROM jboss/wildfly:10.1.0.Final
COPY standalone-full.xml /opt/jboss/wildfly/standalone/configuration/standalone-full.xml
COPY sample.war /opt/jboss/wildfly/standalone/deployments/
USER root
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-c", "standalone-full.xml", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]
如何正确设置独立文件的权限,以便我可以使用“jboss”用户运行应用程序?
我还尝试如下更改 Dockerfile 中的权限以匹配其他文件的权限:
FROM jboss/wildfly:10.1.0.Final
USER root
COPY standalone-full.xml /opt/jboss/wildfly/standalone/configuration/standalone-full.xml
RUN chown jboss:root /opt/jboss/wildfly/standalone/configuration/standalone-full.xml
USER jboss
COPY sample.war /opt/jboss/wildfly/standalone/deployments/
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-c", "standalone-full.xml", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]
但是,权限没有得到应用,我仍然得到同样的错误。 任何人都可以指出我在哪里犯错的正确方向吗?
我正在使用 Docker 版本 17.06.0-ce 和 overlay2 存储驱动
最佳答案
您已将 Wildfly 实例配置为监听 TCP/IP 端口号 < 1024。
实际上是端口 80 和 443。
通常只有 root 用户有权在任何基于 unix 的操作系统(包括 Linux)上执行此操作。
关于linux - 从官方 jboss/wildfly 图像创建自定义图像时,standalone-full.xml 出现“权限被拒绝”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45082142/