Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docker启动失败 #105

Closed
happy-proxy opened this issue May 27, 2019 · 25 comments
Closed

Docker启动失败 #105

happy-proxy opened this issue May 27, 2019 · 25 comments

Comments

@happy-proxy
Copy link

hi,最近尝试在软路由部署docker,这样整个局域网设备都能使用了

我是docker小白,docker启动一直失败

看了下log,提示standard_init_linux.go:207: exec user process caused "exec format error"

我搜了一下,有的说是运行平台版本不匹配,我是在aarch64上运行

请问你有什么建议吗,谢谢!

@nondanee
Copy link
Owner

nondanee commented May 27, 2019

不太清楚

查了下应该是镜像架构的问题

The Problem ist probably that the Image you use has the wrong architecture
https://forums.docker.com/t/standard-init-linux-go-190-exec-user-process-caused-exec-format-error/49368

应该需要把基础镜像改了然后自己 build 一下

https://hub.docker.com/r/aarch64/node
https://hub.docker.com/r/arm64v8/node

我看 aarch64 的镜像被 deprecated,用 arm64v8 试试吧

FROM node:lts-alpine

把这一行改成

FROM arm64v8/node:lts-alpine 

然后

docker build . -t unblockneteasemusic-arm64v8

@happy-proxy
Copy link
Author

happy-proxy commented May 27, 2019

我尝试在portainer上进行build,但是失败了(真docker小白,build还在学习中)

设定

log

我想我是不是应该选择完整的平台而不是在软路由上进行build。

@nondanee
Copy link
Owner

nondanee commented May 27, 2019

这个 Dockerfile 是从源码 build,需要源码的存放位置
拷贝失败应该是你没有提供源码的位置吧
我看这个界面好像不能上传文件或者设置 build 目录?

没有源码 build 也可以的(npm install 可以直接从 Github 拉源码安装)
你可以把 Dockerfile 改成这样

FROM arm64v8/node:lts-alpine

ENV NODE_ENV production

RUN npm install nondanee/UnblockNeteaseMusic -g

EXPOSE 8080

ENTRYPOINT ["UnblockNeteaseMusic"]

不过我没试过,你可以试一下

@happy-proxy
Copy link
Author

happy-proxy commented May 27, 2019

源码build失败

log

这个平台好像也能从github拉文件build,如图第三项就是吧

如果可以的话,是不是我还要fork一下你的项目然后把dockerfile改一下,再build?(正在试)

@nondanee
Copy link
Owner

对的,就是 fork 之后同步比较麻烦

如果 -g 不行的话,或许 npx 可以,等我试了告诉你吧

@happy-proxy
Copy link
Author

蒸腾了一番,貌似成功了

不过你说的也对,如果你代码更新了,我可能还要再来一遍

总之感谢你的指导,希望你能找到更好的办法😂

@nondanee
Copy link
Owner

nondanee commented May 27, 2019

@iDesperad0
可以试试这个 dockerfile

FROM arm64v8/node:lts-alpine

ENV NODE_ENV production

WORKDIR /usr/src/app
RUN npm init -y
RUN npm install --save https://github.com/nondanee/UnblockNeteaseMusic/tarball/master

EXPOSE 8080

ENTRYPOINT ["npx", "UnblockNeteaseMusic"]

另外我查了下 docker image 可以做 multi-arch 的,就是比较麻烦
现在用的人也比较少,所以暂时你自己 build 吧,以后有需要我再加

@happy-proxy
Copy link
Author

@nondanee 好的,我明天试一试,然后给你回复。

当前我自己能build就已经很满足啦。

@happy-proxy
Copy link
Author

@nondanee 刚刚用最新的dockerfile构建了一遍,没问题,这次可以直接用了

随后发现docker版的无版权歌曲又重新变灰了,好像昨天的0.15版本今天下午就用不了了,然后Mac上单独的用证书的进阶版本没有问题。

@nondanee
Copy link
Owner

@iDesperad0
不会吧,iOS 上?还是别的平台?
0.15 是好几天前的版本
现在 0.15.1,是 patch 的版本,代码基本没动

@happy-proxy
Copy link
Author

happy-proxy commented May 29, 2019

@nondanee 昨晚弄了半天,结果很诡异

我是在Android上使用clash的方案,就是这个#56 (comment)

一直不行,我只好拿Mac来测试docker上的版本,发现也不行,最后尝试把docker运行参数-o去掉,这才运成功运行,至此,说明docker的部署没有问题了

遂测试Android,仍然不行,然后Android上关掉clash,改为WLAN设置手动代理的传统方案,结果成功了

结论:

  1. -o参数在docker版本上用不了了?

  2. Android上使用clash的方式无法成功(忽然想到会不会是Android版本clash本身的问题)

注:Android上没有安装证书,但是手动代理的方案可以运行

@nondanee
Copy link
Owner

-o 参数不会影响变不变灰

在 docker 上试试别的参数呢? -p -h -v 之类的

我用这个 dockerfile #105 (comment) build
然后在命令行里 run 试了下,-o 有效

docker run -p 8080:8080 unm -o netease joox

安卓上的 clashA?我没用过

没安装证书又开了 https 监听的话,应该会因为证书错误而降级 http,所以可能也能用。

@happy-proxy
Copy link
Author

happy-proxy commented May 29, 2019

更新!

刚才突发奇想试了试在Android开clash,然后开局域网共享

用同局域网中的Mac设置手动代理的方式连接Android中的代理

结果成功了!这样是不是意味着是Android客户端的锅了?

另外,我的-o参数是:qq xiami baidu

@happy-proxy
Copy link
Author

happy-proxy commented May 29, 2019

把Android云音乐客户端降级低版本,终于成功了

客户端的锅石锤了

我哭了

@nondanee
Copy link
Owner

你 clash 的规则用的是什么啊?

移动端确实比较复杂,有 httpdns 和 IP 直连;桌面端有效的规则,移动端不一定有效

@happy-proxy
Copy link
Author

就是这个#56 (comment)

clash目前没有PROCESS-NAME规则

@nondanee
Copy link
Owner

@iDesperad0

Proxy:
- { name: "UnblockNeteaseMusic", type: http, server: "<Server Name>", port: <PORT>}
Rule:
- DOMAIN-SUFFIX,163.com,UnblockNeteaseMusic
- GEOIP,CN,DIRECT
- MATCH,DIRECT

这个吗?只有 DOMAIN-SUFFIX 对移动端肯定不够的
你可以尝试把 PAC 里的 host 都写到 clash 里

@happy-proxy
Copy link
Author

我尝试把163.com,126.net,netease.com通过DOMAIN-SUFFIX都加进去,仍然不行

算了,我绝望了,总之这个问题的issue基本已经解决了,剩下的就是我去研究看看Android端的代理规则了

这个issue可以关闭啦,谢谢。

@nondanee
Copy link
Owner

好的

PAC 里应该还有一堆 IP,也需要代理

- IP-CIDR,{IP address}/32,...,UnblockNeteaseMusic

安卓上的 clash 是不是 VPN service 实现的?
其实 VPN service 本身是可以分应用代理
https://developer.android.com/reference/android/net/VpnService.Builder.html#addAllowedApplication(java.lang.String)

nondanee added a commit that referenced this issue Jul 26, 2019
@nondanee
Copy link
Owner

@iDesperad0
现在我的镜像应该支持 arm64,不用自己 build 了,有空的话麻烦测试一下哈 😂

@happy-proxy
Copy link
Author

@nondanee
刚才兴奋的试了试,直接从dockerhub拉取arm64标签的容器和镜像,完美运行。

这回就方便多了,感谢。

然后在最近的使用中又有一些新的问题,我要不开个新的issue吧。

@nondanee
Copy link
Owner

@iDesperad0
直接拉 latest 呢?应该会自动识别的吧

好的,新建一个 issue 好了

@happy-proxy
Copy link
Author

对哦,忘记自动识别这个事儿了😂,下次更新就用latest了。

@qinggeouye
Copy link

这个可以直接在「阿里云」-「容器镜像服务」-「镜像仓库」中构建吗?没有构建成功:

aliyun
CPU: 1核
内存: 2 GiB
实例类型: I/O优化
操作系统: CentOS 7.4 64位

日志:
1docker image building is started ...
2[ fetch stage begin.]
3fetch dockerfile and context
4From https://github.com/qinggeouye/UnblockNeteaseMusic
5 * [new branch] master -> origin/master
6Previous HEAD position was d58e45e bump version
7HEAD is now at 24caf36 check host in request headers #162
8[fetch successfully.]
9==========================================
10[docker version.]
11Client:
12 Version: 17.06.1-ce
13 API version: 1.30
14 Go version: go1.8.3
15 Git commit: 874a737
16 Built: Thu Aug 17 22:53:49 2017
17 OS/Arch: linux/amd64
18
19Server:
20 Version: 17.06.1-ce
21 API version: 1.30 (minimum version 1.12)
22 Go version: go1.8.3
23 Git commit: 874a737
24 Built: Thu Aug 17 23:01:50 2017
25 OS/Arch: linux/amd64
26 Experimental: false
27==========================================
28[docker build stage begin.]
29Sending build context to Docker daemon 78.85kB

30Step 1/10 : ARG ARCH="amd64"
31 --->
32Step 2/10 : FROM multiarch/alpine:$ARCH-latest-stable
33amd64-latest-stable: Pulling from multiarch/alpine
34de29c4ab0f1d: Pulling fs layer
35bc3b1cc4cab3: Pulling fs layer
36bc3b1cc4cab3: Verifying Checksum
37bc3b1cc4cab3: Download complete
38de29c4ab0f1d: Verifying Checksum
39de29c4ab0f1d: Download complete
40de29c4ab0f1d: Pull complete
41bc3b1cc4cab3: Pull complete
42Digest: sha256:d88cb4b57aa9e129f39d77333e87f8acd6a0da594c727f39347aa36a82baa61a
43Status: Downloaded newer image for multiarch/alpine:amd64-latest-stable
44 ---> 6e1a5cc10caa
45Step 3/10 : RUN apk add --update nodejs npm
46 ---> Running in ecdd14617b29
47fetch https://uk.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
48ERROR: https://uk.alpinelinux.org/alpine/v3.10/main: BAD signature
49fetch https://uk.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz

@nondanee
Copy link
Owner

nondanee commented Aug 4, 2019

@qinggeouye
应该可以的吧
报错信息是软件包签名验证失败,感觉给 alpine 换个镜像源就行了

因为要做 multiarch 才换了基础镜像
如果你特别需求可以把 Dockerfile rollback 到 777f8f0 及之前版本

P.S. 你需要自己构建是有什么痛点我没解决吗?

lizeyan pushed a commit to lizeyan/UnblockNeteaseMusic that referenced this issue Sep 10, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants