【发布时间】:2016-03-29 12:35:19
【问题描述】:
我正在尝试对接 Stardog 3.1.3 社区版服务器。容器无法启动,因为它看到的是目录而不是许可证文件。作为记录,我在 Windows 上。这些是我正在遵循的步骤:
创建数据容器
docker create -v /data/stardog:/data/stardog --name stardog_data busybox /bin/true
将本地许可证密钥复制到数据容器(未在下面提到的 Dockerfile 中完成,因为许可证是特定于环境的)
docker cp .\stardog\stardog-license-key.bin stardog_data:/stardog-license-key.bin
根据以下 Dockerfile 创建镜像
docker build -t me/stardog .
FROM java:openjdk-8-jdk
ENV STARDOG_VER stardog-3.1.3
ENV STARDOG_HOME /data/stardog
COPY ${LOCAL_PATH}/${STARDOG_VER}.zip /
RUN unzip ${STARDOG_VER}.zip
WORKDIR /${STARDOG_VER}
CMD rm $STARDOG_HOME/system.lock || true && bin/stardog-admin server start && (tail -f $STARDOG_HOME/stardog.log &) && while (pidof java > /dev/null); do sleep 1; done
运行 Stardog 容器
docker run -d -p 5820:5820 --volumes-from stardog_data --name stardog me/stardog
当我执行docker ps -a 时,我看到容器在几秒钟后停止了:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9559b22473e1 me/stardog "/bin/sh -c 'rm $STAR" 26 minutes ago Exited (1) 26 minutes ago stardog
2b929329e35e busybox "/bin/true" 32 minutes ago Created stardog_data
当我使用 docker logs stardog 检查日志时,我得到了这个:
com.clarkparsia.license.InvalidLicenseException: java.io.FileNotFoundException: /data/stardog/stardog-license-key.bin (Is a directory)
at com.clarkparsia.license.LicenseValidator.validate(LicenseValidator.java:157)
at com.complexible.stardog.StardogLicense.findLicense(StardogLicense.java:127)
at com.complexible.stardog.StardogLicense.<init>(StardogLicense.java:70)
at com.complexible.stardog.Stardog.<init>(Stardog.java:158)
at com.complexible.stardog.Stardog.initialize(Stardog.java:263)
at com.complexible.stardog.Stardog.initialize(Stardog.java:254)
at com.complexible.stardog.Stardog.buildServer(Stardog.java:247)
at com.complexible.stardog.cli.impl.ServerStart.call(ServerStart.java:144)
at com.complexible.stardog.cli.impl.ServerStart.call(ServerStart.java:47)
at com.complexible.stardog.cli.CLIBase.execute(CLIBase.java:54)
at com.complexible.stardog.cli.admin.CLI.main(CLI.java:194)
Caused by: java.io.FileNotFoundException: /data/stardog/stardog-license-key.bin (Is a directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at com.clarkparsia.license.LicenseValidator.validate(LicenseValidator.java:113)
... 10 more
Your Stardog license is invalid. Please contact support@clarkparsia.com for information on obtaining a new license.
似乎许可文件被认为是一个目录。我做错了什么?
我正在使用以下 Docker 版本:
Client:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: windows/amd64
Server:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: linux/amd64
【问题讨论】:
-
docs.docker.com/engine/reference/commandline/cp 的文档显示了几种目标成为目录的情况,例如
SRC_PATH specifies a directory DEST_PATH does not exist DEST_PATH is created as a directory and the contents of the source directory are copied into this directory您应该将完整路径放在源和目标上 -
我没有看到任何关于完整路径的建议,但我尝试了以下但没有成功(同样的错误):
C:\Users\xxx\stardog\stardog-license-key.bin stardog_data:/data/stardog/stardog-license-key.bin。另外,AFAIK 我处于以下情况:SRC_PATH specifies a file, DEST_PATH does not exist, the file is saved to a file created at DEST_PATH。有什么想法吗? -
docker cp 文档说
The cp command behaves like the Unix cp -a command in that directories are copied recursively with permissions preserved if possible -
不确定这与问题有何关系。可能只是我对linux的有限了解。在我的第一条评论中,我确实尝试了
stardog_data:/data/stardog/stardog-license-key.binas CONTAINER:DEST_PATH,但无济于事。你能指出问题吗?无论如何,感谢您的帮助! -
你的第一个例子正确吗?看起来您正在“卷”路径之外进行复制;
stardog_data:/stardog-license-key.bin。如果你docker cp stardog-license-key.bin stardom_data:/data/stardog/会发生什么(即指定它应该复制到的目录)
标签: docker boot2docker stardog