У меня есть веб-приложение, которое использует язык go в качестве серверной части. Когда я запускаю свой веб-сайт, я просто использую go build; ./projectName, тогда он будет работать на локальном порте сервера 8000. Как мне запустить это веб-приложение в контейнере? Я могу запускать образцы изображений, такие как nginx, в контейнере, но как мне создавать свои собственные изображения для моих проектов. Я создал Dockerfile внутри своей папки проекта со следующими кодами:
FROM nginx:latest
WORKDIR static/html/
COPY . /usr/src/app
Затем сделал изображение с помощью Dockerfile, но когда я запускаю его в контейнере и перехожу на localhost: myPort / static / html / page.html, он говорит, что страница 404 не найдена. Другой вопрос: может ли докер запускать только статические страницы в контейнере? потому что мой сайт может получать и отправлять данные. Спасибо
это мой файл докеров (./todo - имя моего проекта и имя папки)
это мой терминал (как вы видите, контейнер сразу выходит)
Вы можете попробовать получить доступ к порту локального хоста из контейнера Docker. как указано здесь


Я предполагаю, что вы не открываете порт Docker за пределами контейнера. Вот почему вы не можете видеть какой-либо вывод, а не просто относитесь к программе GO. Попробуйте добавить следующие строки в свой файл docker compose
EXPOSE 80(whichever port you want it to be)
EXPOSE 443
EXPOSE 3306
Это обеспечит доступ к контейнеру извне.
зачем трое выставлять? первый - это порт, на котором работает мое веб-приложение?
Вот как может выглядеть ваш Dockerfile:
FROM golang:latest
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN go build -o main .
EXPOSE 8000
CMD ["/app/main"]
что такое команда CMD, мне делать CMD ["main.go"]? и я запутался с WORKDIR, какой каталог выбрать? Благодарность
CMD сообщает, что будет выполнено при запуске контейнера. Вам не нужно запускать main.go, вам нужно сначала его собрать (RUN go build -o main.), А затем / app / main будет вашим исполняемым путем. WORKDIR просто означает pwd вашего контейнера.
Как заставить файл докеров игнорировать пакет, потому что мой всегда пытается получить пакет, который на самом деле является просто папкой, которую я импортировал в свой код golang, если я использую RUN go get github.com/folderName, я все равно получу сообщение об ошибке потому что это не на github, а просто папка. Спасибо
"не могу найти пакет github.com/rn1hd/todo/models". Но в моем коде я только что импортировал эту папку, потому что она содержит некоторые из моих файлов .go, спасибо
Вот что я сделал для своего веб-приложения GOlang с использованием фреймворка Gin-gonic:
мой Dockerfile:
FROM golang:latest
# Author
MAINTAINER dangminhtruong
# Create working folder
RUN mkdir /app
COPY . /app
RUN apt -y update && apt -y install git
RUN go get github.com/go-sql-driver/mysql
RUN go get github.com/gosimple/slug
RUN go get github.com/gin-gonic/gin
RUN go get gopkg.in/russross/blackfriday.v2
RUN go get github.com/gin-gonic/contrib/sessions
WORKDIR /app
Затем создайте образ докера
docker build -t web-app:latest .
Наконец, запустите мое веб-приложение
docker run -it -p 80:8080 -d web-app:latest go run main.go //My webapp start at 8080 port
Надеюсь, это полезно
ваше веб-приложение работает отдельно или внутри контейнера? потому что мой контейнер вышел сразу после его запуска, но веб-приложение работает из-за команды // go build; название проекта. Итак, я предполагаю, что мое веб-приложение работает само по себе, а не внутри контейнера.
Мое веб-приложение работает внутри контейнера. Вы немедленно остановите контейнер, я поставлю для него точку входа. Можете ли вы сейчас показать свой dockerfile?
docker ps -a затем скопируйте идентификатор имени контейнера докеров, который завершился. Затем проверьте подробности журналов контейнера. docker logs --details your_container_name может оказаться полезным.
Самый простой способ запустить веб-приложение golang в контейнере - это начать с официального образа golang, найденного здесь: hub.docker.com/_/golang/, и следовать инструкциям раздела «Запуск экземпляра Go в вашем приложении».