gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:48:30 33 4
gpt4 key购买 nike

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

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com