Я запускаю докер:
docker run -p 8080:8080 -t admin
localhost:8080 не отвечает, но я запускаю go run admin/main.go я могу дозвониться localhost:8080 Я знаю, что есть много вопросов по этой проблеме, и я все изучил:
Использование правильных портов: 8080:8080
Я могу подключиться к серверу, работая на своей локальной машине: убедитесь, что сервер обслуживает правильный порт.
Вот мой Dockerfile — выставляю правильный порт 8080:
FROM --platform=linux/amd64 golang:1.19.3-bullseye
# Install grpc
RUN go install google.golang.org/grpc/cmd/[email protected] && \
go install google.golang.org/protobuf/cmd/[email protected]
WORKDIR /app
COPY . .
# Install protoc and zip system library
RUN apt-get update && apt-get install -y zip && apt-get install -y tree && \
mkdir /opt/protoc && cd /opt/protoc && wget https://github.com/protocolbuffers/protobuf/releases/download/v3.7.0/protoc-3.7.0-linux-x86_64.zip && \
unzip protoc-3.7.0-linux-x86_64.zip
# Copy the grpc proto file and generate the go module
# RUN /opt/protoc/bin/protoc --proto_path=/app --go_out=/app --go_opt=paths=source_relative --go-grpc_out=/app --go-grpc_opt=paths=source_relative /app/proto/textbear.proto /app/proto/server.proto
RUN /opt/protoc/bin/protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative proto/textbear.proto db/proto/db.proto server/proto/server.proto
RUN go mod download
EXPOSE 8080
RUN go build -o /admin admin/main.go
ENTRYPOINT ["/admin"]
Я, наверное, упускаю что-то очевидное.
Опубликуйте сообщение об ошибке и соответствующие части журнала контейнера.
./admin ошибка приложения, потому что не найдено. Об ошибке: Ошибок вообще нет и логов тоже.
Я нашел проблему. Этот контейнер зависит от другого контейнера. Им нужно общаться через grpc, и я не настроил сеть между ними в docker compose.
Как приложение настраивает свой сетевой прослушиватель? Независимо от вашей конфигурации Docker, если он прослушивает только частный адрес локального хоста 127.0.0.1 или если он не прослушивает тот же порт 8080, он будет недоступен.


Мой контейнер администратора зависит от сети контейнеров БД. Мой контейнер администратора использовал адрес localhost и вызывал зависание контейнера администратора в ожидании подключения к контейнеру БД. Я исправил, изменив адрес с localhost на db, и, поскольку docker compose будет генерировать хост для всех изображений, администратор мог общаться с БД, используя имя хоста db.
Вот мой Dockerfile:
version: '3'
services:
admin:
image: admin
ports:
- "8080:8080"
db:
image: db
ports:
- "50052:50052"
server:
image: server
ports:
- "50051:50051"
Я думаю, что ваша точка входа должна быть
./admin, а не/admin