首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取docker映像以运行可执行文件

如何获取docker映像以运行可执行文件
EN

Stack Overflow用户
提问于 2016-07-15 00:24:33
回答 3查看 961关注 0票数 0

我想在docker容器中运行一个.exe。下面是源码的链接。

Git:https://github.com/jcreynolds/NodeLink集线器:https://hub.docker.com/r/jcreynolds/nodelink/

docker容器看起来是构建的,但是它不会运行。任何帮助都将不胜感激。

Edit#1:在unraid中使用

Edit#2:添加unraid docker日志

代码语言:javascript
复制
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

Edit#3:解决了!问题出在docker run命令中(不同之处在于-i),有人知道-i做什么吗?

有效的run命令:

代码语言:javascript
复制
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

它试图使用的run命令:

代码语言:javascript
复制
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文件代码:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
#!/bin/bash
if [ ! -e "/NodeLink/NodeLink.exe" ]; then
cd /NodeLink
wget http://automationshack.com/Files/NodeLink.exe
fi
mono /NodeLink/NodeLink.exe &
/bin/bash
EN

回答 3

Stack Overflow用户

发布于 2016-07-15 00:38:40

您不能只在Docker容器中运行Windows可执行文件。我对在mono下运行它没有意见,但是如果你的startup.sh脚本真的能工作,它可能应该是你的容器的入口点。

代码语言:javascript
复制
RUN chmod -v +x /tmp/startup.sh
ENTRYPOINT /tmp/startup.sh

对于某些解释-在Dockerfile中运行该命令将启动一个进程,该进程在该运行命令完成时立即结束。当Docker容器启动时,没有后台进程在运行--只有作为入口点的父进程。您正在尝试将windows可执行文件提供给Bash,但这将不起作用。相反,您可以启动一个shell,启动您的后台进程,并让该shell启动bash- bash shell就是父进程,它将使您的后台进程保持运行,直到您退出shell。

票数 0
EN

Stack Overflow用户

发布于 2016-07-15 01:30:44

您可以使用wine或Mono在Docker容器中运行Windows可执行文件,方法与在Linux下相同。

请参阅https://hub.docker.com/r/solarkennedy/wine-x11-novnc-docker/

作为一个很好的例子。

如果你的视窗可执行文件需要dotnet20或dotnet45,你需要在你的Dockerfile文件中执行winetricks dotnet20或类似的操作

票数 0
EN

Stack Overflow用户

发布于 2016-07-15 05:15:04

我的问题的解决方案在Edit#3

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38379435

复制
相关文章

相似问题

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