当前位置: 首页 > 面试题库 >

Postgres,Go Docker编写wait-for-it.sh没有此类文件或目录

李文轩
2023-03-14
问题内容

我已经花了将近两天的时间来讨论这个问题。

我是Docker和Docker Compose的新手,并尝试在运行Postgres和Go的EC2实例上运行我的映像。当我运行docker-compose
up时,db服务成功运行,但app服务未成功运行。

当我尝试使用以下方法分别运行服务时:

docker-compose up db 一切都很好

然后运行:

docker-compose up app 我知道了

app_1  | wait-for-it.sh: waiting 15 seconds for db:5432
app_1  | wait-for-it.sh: db:5432 is available after 0 seconds
app_1  | ./wait-for-it.sh: line 174: /go/src/github.com/MY_USERNAME/MY_APP_DIR/EXECUTABLE: No such file or directory
some_name-golang_app_1 exited with code 127

Dockerfile备用:

FROM  golang:latest

EXPOSE 8080

WORKDIR /go/src/github.com/MY_USERNAME/MY_APP_DIR
ADD . /go/src/github.com/MY_USERNAME/MY_APP_DIR

# Install all dependencies of the current project.
RUN go get -v
RUN go build

docker-compose.yml

version: '3'
services:
  db:
      image: postgres
      environment:
          POSTGRES_DB: dbname
          POSTGRES_USER: miller
          POSTGRES_PASSWORD: miller
      ports:
        - "6000:5432"
  app:
    build:
      context: .
      dockerfile: Dockerfile-alternate
    command: ["./wait-for-it.sh", "db:5432", "--", "./EXECUTABLE"]
    volumes:
      - .:/go/src/github.com/gregpmillr/volume
    ports:
      - "80:8080"
    depends_on:
        - db
    links:
        - db

有趣的是,如果我运行了,docker run -it --rm MY_USERNAME/custom-go- image那么我实际上会看到该EXECUTABLE文件,并且可以./EXECUTABLE成功运行…好吧,我没有出现这样的主机错误,但是可以肯定的是,因为我没有同时使用docker启动它们-
撰写。

对这个问题有什么想法吗?提示/资源会很棒。我一直在努力探索谷歌搜索问题,无所适从。和往常一样,这可能是我所缺少的小东西。谢谢!!

我希望先运行postgres(现在可以正常运行),然后运行连接到postgres的go服务器

更新1

command: [ "sh", "-c", "cd /go/src/github.com/gregpmillr/volume && ls -l" ]

将给出以下输出:

db_1   | 2018-08-19 11:19:48.828 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db_1   | 2018-08-19 11:19:48.828 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_1   | 2018-08-19 11:19:48.831 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1   | 2018-08-19 11:19:48.857 UTC [21] LOG:  database system was shut down at 2018-08-19 01:03:35 UTC
db_1   | 2018-08-19 11:19:48.880 UTC [1] LOG:  database system is ready to accept connections
app_1  | total 36
app_1  | -rw-rw-r-- 1 1000 1000  238 Aug 19 11:19 Dockerfile-alternate
app_1  | -rw-rw-r-- 1 1000 1000  260 Aug 17 19:24 Dockerrun.aws.json
app_1  | -rw-rw-r-- 1 1000 1000   62 Aug 17 18:56 README.md
app_1  | drwxrwxr-x 8 1000 1000 4096 Aug 17 19:00 app
app_1  | drwxrwxr-x 2 1000 1000 4096 Aug 17 19:34 config
app_1  | -rwxrwxr-x 1 1000 1000  708 Aug 17 19:48 deploy.sh
app_1  | -rw-rw-r-- 1 1000 1000  548 Aug 19 11:19 docker-compose.yml
app_1  | -rw-rw-r-- 1 1000 1000 1188 Aug 17 19:00 main.go
app_1  | -rwxrwxr-x 1 1000 1000 4079 Aug 17 19:00 wait-for-it.sh
app_1 exited with code 0

Dockerrun文件是不必要的,因为我没有使用弹性beantalk atm。

更新2已
解决。请参阅接受的答案。更具体地说,请参阅https://docs.docker.com/storage/和https://docs.docker.com/storage/volumes/以获取有关卷的更多信息。谢谢您的帮助!


问题答案:

您已经将go源代码添加到了映像中,并在映像内部对其进行了编译,作为构建的一部分。然后,通过包含以下内容,用包含源代码的卷(显然没有编译的二进制文件)覆盖同一路径:

volumes:
  - .:/go/src/github.com/gregpmillr/Tranquility-Online-Golang

您要么在该卷中需要已编译的二进制文件,要么跳过该卷到容器中的安装,因为它阻止了对映像文件的访问。



 类似资料:
  • wait-for-it.sh 等待某给定服务的端口可用(服务启动起来),否则不断探测。

  • 问题内容: 我正在对GitHub上的此示例Angular2应用进行较小的修改,以使其使用Express.js而不是KOA。但是目前,当我尝试在FireFox中加载应用程序时,控制台中会显示以下错误: 当http请求触发路由器处理程序并返回时,Angular2应用程序开始加载,该处理程序返回,然后触发一系列嵌套依赖项的回调,其中一个引发错误并中途停止应用程序加载。 为了解决GitHub示例中的代码需

  • 我试图熟悉kthread,并编写了一个非常简单的程序来用C语言测试它,指导如下:http://tuxthink.blogspot.com/2011/02/kernel-thread-creation-1.html.我在MacOSX上的威睿运行Ubuntu。 当我试图使用gcc (gcc test5.c -o test5.out)编译这个文件时,我得到“致命错误:linux/kthread.h:没有

  • 我正在尝试使用gcc执行tualth01.c,并且我将gcc和tudelaus01.c与libavcodec和libavformat及其相关文件放在同一文件夹中,它给了我这个错误 致命错误:libavcodec/avcodec. h没有终止此类文件或目录编译 当我通过Ubuntu12.04中的终端运行<code>gcc-o tutorial01 tutorial 01.c-lavformat-la

  • 尝试在我的14.10版ubuntu上安装rJava包,使用以下代码 在重新安装jdk后,遇到了一些与jni相关的错误,包括jni问题,并尝试再次运行相同的代码,得到了该错误 寻找解决方案,找到所有建议(对于x64)执行这些命令的人 但这不起作用,我还能做什么?我会提供任何需要的细节。

  • 我有一个巨大的麻烦来运行我的代码。我已经尝试过重新安装packges,在环境中安装等等,但是我认为我做得不对。 我得到这个信息: 使用TensorFlow后端。 回溯(最近一次呼叫最后一次): 文件“”,第1行,在导入keras中 文件“/home/wagner/anaconda3/lib/python3.5/site packages/keras/init.py”,第3行,在from中。导入UT