Docker复制的文件被看作是一个目录

我试图dockerize一个Stardog 3.1.3社区版服务器。 容器无法启动,因为它看到一个目录而不是许可证文件。 为了logging,我在Windows上。 这些是我所遵循的步骤:

创build一个数据容器

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创build一个映像

 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 

这似乎是一个Windows相关的问题。 我已经尝试在本机Ubuntu(14.04)机器上完全相同的步骤,它按预期工作。 我已经提出这个错误 ,希望这个问题很快得到解决。

Interesting Posts