在docker container

时间:2018-02-08 23:48:33

标签: bash docker dockerfile

我尝试设置两个码头工人。一个有服务,一个有数据库。在有服务的docker上,我尝试从https://github.com/vishnubob/wait-for-it运行脚本wait-for-it.sh。

我尝试使用docker-compose文件来完成所有这些工作,但我将问题与容器启动时运行的.sh文件隔离开来。

FROM openjdk:8-jdk-alpine
RUN apk add --no-cache bash
COPY ./target/docker-demo-0.0.1-SNAPSHOT.jar  /app.jar
COPY ./src/main/resources/wait-for-it.sh  /wait-for-it.sh
ENTRYPOINT ["/wait-for-it.sh", "192.168.99.100:5432", "--", "java", "-jar", 
"/app.jar"]
EXPOSE 8080

我正在使用高山图像中的清洁灰,接下来,我正在安装bash。当然,我正在改变

的第一行脚本代码
#!/usr/bin/env bash

进入

#!/bin/sh

#!/bin/bash

没有任何帮助。我看到了这个话题How to run a bash script in an Alpine Docker container,但它也没有帮助。

我总是收到"没有这样的文件或目录"。我在弄乱

ENTRYPOINT ["/wait-for-it.sh"...

添加"。"或" ./"

我正在使用Windows 8的docker工具构建的整个项目。也许有原因?

3 个答案:

答案 0 :(得分:2)

我有同样的问题。我花了两天时间弄清楚它为什么不起作用。我的主机是windows,所以wait-for-it.sh文件格式化为dos。

  1. 我必须运行dos2unix wait-for-it.sh命令来转换unix系统的文件。 (Convert files to unix systems
  2. 我在Dockerfile中添加了这3行:
  3. RUN apk add --no-cache bash
    COPY wait-for-it.sh /wait-for-it.sh
    RUN chmod +x /wait-for-it.sh

    然后wait-for-it.sh在容器启动时运行。

    如果您使用的是GIT,git会根据主机处理行结尾。 您必须在项目中添加文件.gitattributes,并将此行*.sh eol=lf添加到此文件中。 所以你要告诉你所有的.sh文件都有LF的行结尾

答案 1 :(得分:0)

COPY ./src/main/resources/wait-for-it.sh  /wait-for-it.sh

这条线是罪魁祸首。如果脚本位于绝对目录

中,请使用此选项
COPY /src/main/resources/wait-for-it.sh  /wait-for-it.sh

如果脚本位于相对目录

中,请使用此选项
COPY src/main/resources/wait-for-it.sh  /wait-for-it.sh

然后运行此

RUN chmod 700 /wait-for-it.sh

答案 2 :(得分:0)

  1. 在复制声明中,尝试仅提供目标文件夹。

    e.g。 COPY ./src/main/resources/wait-for-it.sh / app

  2. 还设置容器启动的工作目录

    WORKDIR / app

  3. 同时确保您已为该文件提供了执行权限,如@vamsi在其答案中建议的那样。