linux - 从官方 jboss/wildfly 图像创建自定义图像时,standalone-full.xml 出现“权限被拒绝”错误

标签 linux docker jboss wildfly

我正在努力构建一个源自官方 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)

我执行到正在运行的容器中以查看独立文件的文件权限:

link to screenshot of ls -la command inside the container's /opt/jboss/wildfly/standalone/configuration/ directory

如果我在运行 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/

相关文章:

docker - 如何对 Windows 应用程序进行 Docker 化

c# - 使用包含法国口音的名称发布保存文件

authentication - JBoss 服务器上的客户端身份验证

java - JBoss Gradle

IZPack 5.0.0 处理阶段的 linux 命令 mkdir、rm -r 和 ln -s -T

linux - curl 命令不下载文件 (linux mint)

docker - 如何运行具有持久数据的 Prestashop docker 容器?

java - 从 Eclipse 远程调试服务器 Jboss eap 6.4 失败

linux - Bash- 将文件解析为数组

c - 内核的哪一部分加载了PS3的framebuffer模块?