Open davidhunterxyz opened 9 years ago
@DavidHunter Not really something Goal specific as a project developed with Goal is just a regular Go app that can be built as follows:
go build github.com/davidhunter/goal-sample
So, any Dockerfile that works for a standard library based Go app will work for your project, too. E.g., Revel's Dockerfile from the thread:
FROM debian
RUN apt-get update
WORKDIR /home
ADD ./ /home
ENTRYPOINT /home/bin/run
EXPOSE 8080
In this case you have to have an already compiled binary of your project.
Alternatively, use this sample from Go language's docs, do not try to install Goal, install your project:
# Build the outyet command inside the container.
# (You may fetch or manage dependencies here,
# either manually or with a tool like "godep".)
RUN go install github.com/davidhunter/goal-sample
fatal: could not read Username for 'https://github.com': No such device or address package github.com/davidhunter/goal-sample/server: exit status 128
Do you have access for git clone github.com/davidhunter/goal-sample/server
? Here is a related SO question: Docker: go get from a private GitHub repo.
The issue has been resolved, it is not enough to listen on localhost:8080
(#32).
The way to run an app with the Dockerfile
mentioned in the message above:
# Build the image and tag it as myImage (use whatever tag name you want).
docker build -t myImage .
# Run the app, publish container's :8080 port on the external :8080 port
# (format: `external_addr_or_port:container's_port`), give the app a predictable name.
docker run --publish 8080:8080 --name myApp
@alkchr I think a docker file inside the project skeleton would be useful for this project
:+1: Should it be a Dockerfile that uses golang:onbuild
to compile the app and then start it as in your https://github.com/colegion/goal/issues/27#issue-116486718? Or we can just copy already compiled binary from bin
directory and use it with debian
image as in my https://github.com/colegion/goal/issues/27#issuecomment-156020484?
golang:onbuild
only worked for me if the Goal project repository was on github.com and I had to build the binary with env GOOS=linux go build -o bin/run
for it to work in docker when just copying over the binary.
I am not sure if I am using golang:onbuild
wrong or if their is a way to build the binary for mac and linux.
This Dockerfile seems to work when the install path is set to the same project gopath.
FROM golang:1.5
COPY . /go/src/github.com/colegion/goal/internal/skeleton
WORKDIR /go/src/github.com/colegion/goal/internal/skeleton
RUN go get -u github.com/colegion/goal/...
RUN go install github.com/colegion/goal/internal/skeleton
ENTRYPOINT /go/bin/skeleton
EXPOSE 8080
This Dockerfile seems to work when the install path is set to the same project gopath.
Yeah, right. Because generated apps use absolute import paths (e.g. github.com/johndoe/forum/controllers
instead of ./controllers
). So, you have to keep the structure in order to compile the code.
Your Dockerfile
looks good. Does it work without the RUN go get -u github.com/colegion/goal/...
? If so, I would go with the following config:
FROM golang:1.5
COPY . /go/src/github.com/colegion/goal/internal/skeleton
WORKDIR /go/src/github.com/colegion/goal/internal/skeleton
# Flag "-d" means download only, do not install.
RUN go get -d github.com/colegion/goal/internal/skeleton
RUN go build -o ./bin/run github.com/colegion/goal/internal/skeleton
ENTRYPOINT ./bin/run --http.addr :8080
EXPOSE 8080
If this works, we can add to the skeleton and close this issue.
@alkchr Your docker file works
Goal gives a error while trying to build a docker image with this dockerfile. It works if the project files are on a public github repo.
Then their is another issue where I can't connect to it outside a container.