我已经花了将近两天的时间来讨论这个问题。
我是Docker和Docker Compose的新手,并尝试在运行Postgres和Go的EC2实例上运行我的映像。当我运行docker-compose up时,db服务成功运行,但app服务未成功运行。
db
app
当我尝试使用以下方法分别运行服务时:
docker-compose up db 一切都很好
docker-compose up db
然后运行:
docker-compose up app 我知道了
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启动它们- 撰写。
docker run -it --rm MY_USERNAME/custom-go- image
EXECUTABLE
./EXECUTABLE
对这个问题有什么想法吗?提示/资源会很棒。我一直在努力探索谷歌搜索问题,无所适从。和往常一样,这可能是我所缺少的小东西。谢谢!!
我希望先运行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
您要么在该卷中需要已编译的二进制文件,要么跳过该卷到容器中的安装,因为它阻止了对映像文件的访问。