我想在docker容器中运行.exe。以下是来源链接。
Git:https://github.com/jcreynolds/NodeLink 枢纽:https://hub.docker.com/r/jcreynolds/nodelink/
Docker容器似乎构建但不会运行。任何帮助将不胜感激。
编辑#1:这是用于unraid
编辑#2:添加了unraid docker log
Jul 14 12:50:41 BennySRV php: /usr/local/emhttp/plugins/dynamix.docker.manager/scripts/docker 'start' 'NodeLink'
Jul 14 12:50:41 BennySRV kernel: device veth8fb01c8 entered promiscuous mode
Jul 14 12:50:41 BennySRV kernel: docker0: port 10(veth8fb01c8) entered forwarding state
Jul 14 12:50:41 BennySRV kernel: docker0: port 10(veth8fb01c8) entered forwarding state
Jul 14 12:50:41 BennySRV avahi-daemon[2619]: Withdrawing workstation service for veth958915c.
Jul 14 12:50:41 BennySRV kernel: docker0: port 10(veth8fb01c8) entered disabled state
Jul 14 12:50:41 BennySRV kernel: eth0: renamed from veth958915c
Jul 14 12:50:41 BennySRV kernel: docker0: port 10(veth8fb01c8) entered forwarding state
Jul 14 12:50:41 BennySRV kernel: docker0: port 10(veth8fb01c8) entered forwarding state
Jul 14 12:50:41 BennySRV kernel: veth958915c: renamed from eth0
Jul 14 12:50:41 BennySRV kernel: docker0: port 10(veth8fb01c8) entered disabled state
Jul 14 12:50:41 BennySRV kernel: docker0: port 10(veth8fb01c8) entered disabled state
Jul 14 12:50:41 BennySRV avahi-daemon[2619]: Withdrawing workstation service for veth958915c.
Jul 14 12:50:41 BennySRV avahi-daemon[2619]: Withdrawing workstation service for veth8fb01c8.
Jul 14 12:50:41 BennySRV kernel: device veth8fb01c8 left promiscuous mode
Jul 14 12:50:41 BennySRV kernel: docker0: port 10(veth8fb01c8) entered disabled state
编辑#3:解决了!问题出在docker run命令中 (不同的是-i)有谁知道-i有什么作用?
运行命令:
docker run --name=NodeLink --net="bridge" -i -e TZ="America/Chicago" -v "/mnt/user/Config/NodeLink":"/config":rw -p 8090:8090/tcp -d jcreynolds/nodelink
它试图使用的运行命令:
docker run -d --name="NodeLink" --net="bridge" -e TZ="America/Chicago" -p 8090:8090/tcp -v "/mnt/user/Config/NodeLink":"/config":rw jcreynolds/nodelink
编辑:添加了有问题的代码:
docker文件代码:
FROM ubuntu:latest
#...
# Adding Custom files
##################
COPY startup.sh /tmp/startup.sh
RUN chmod -v +x /tmp/startup.sh && sleep 1 && /tmp/startup.sh && rm /tmp/startup.sh
CMD ["/NodeLink/NodeLink.exe"]
startup.sh文件:
#!/bin/bash
if [ ! -e "/NodeLink/NodeLink.exe" ]; then
cd /NodeLink
wget http://automationshack.com/Files/NodeLink.exe
fi
mono /NodeLink/NodeLink.exe &
/bin/bash
答案 0 :(得分:0)
您不能只在Docker容器中运行Windows可执行文件。我对在mono下运行它没有意见,但是如果你的startup.sh脚本实际上有效,它可能应该是你容器的入口点。
RUN chmod -v +x /tmp/startup.sh
ENTRYPOINT /tmp/startup.sh
对于某些解释 - 在Dockerfile中运行命令会启动一个在RUN命令完成后立即结束的进程。当Docker容器启动时,没有后台进程在运行 - 只有父进程是ENTRYPOINT。您正在尝试将Windows可执行文件提供给Bash,这将无法正常工作。相反,启动一个shell,启动你的后台进程,然后让shell启动bash- bash shell然后是父进程,它将保持你的后台进程运行,直到退出shell。
答案 1 :(得分:0)
您可以在Docker容器中运行Windows可执行文件,就像在Linux下使用wine或Mono一样。
请参阅https://hub.docker.com/r/solarkennedy/wine-x11-novnc-docker/
是一个很好的例子。
如果您的Windows可执行文件需要dotnet20或dotnet45,则需要在Dockerfile中执行winetricks dotnet20
等
答案 2 :(得分:0)
我的问题的解决方案在编辑#3
中