rad*_*ren 2 go docker docker-compose
我正在尝试在 docker 中运行我的restful api,但是我的 golang 可执行文件有问题,它总是找不到。这是我的 Dockerfile
# Start from golang base image
FROM golang:1.15.2
#Set ENV
ENV DB_HOST=fullstack-mysql \
DB_DRIVER=mysql \
DB_USER=root \
DB_PASSWORD=root \
DB_NAME=link_aja \
DB_PORT=3306 \
APP_NAME=golang-linkaja \
CGO_ENABLED=0
# Copy the source from the current directory to the working Directory inside the container
COPY . /usr/src/${APP_NAME}
# Move to working directory
WORKDIR /usr/src/${APP_NAME}
#install depedencies
RUN go mod download
# Build the application
RUN go build -o ${APP_NAME}
# Expose port 3000 to the outside world
EXPOSE 3000
#Command to run the executable
CMD ${APP_NAME}
Run Code Online (Sandbox Code Playgroud)
这是我的 docker-compose.yml
version: '3'
services:
app:
container_name: golang-linkaja
build: .
ports:
- 3000:3000
restart: on-failure
volumes:
- api:/usr/src/${APP_NAME}
depends_on:
- fullstack-mysql
networks:
- fullstack
fullstack-mysql:
image: mysql:5.7
container_name: full_db_mysql
ports:
- 3306:3306
environment:
- MYSQL_ROOT_HOST=${DB_HOST}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASSWORD}
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
volumes:
- database_mysql:/var/lib/mysql
networks:
- fullstack
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin_container
depends_on:
- fullstack-mysql
environment:
- PMA_HOST=fullstack-mysql #DB_HOST env must be the same with this
- PMA_USER=${DB_USER}
- PMA_PORT=${DB_PORT}
- PMA_PASSWORD=${DB_PASSWORD}
ports:
- 9090:80
restart: always
networks:
- fullstack
volumes:
api:
database_mysql:
# Networks to be created to facilitate communication between containers
networks:
fullstack:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
除了 Go 应用程序本身之外,一切正常,这是我收到的错误
golang-linkaja | /bin/sh: 1: golang-linkaja: not found
Run Code Online (Sandbox Code Playgroud)
我可以得到任何帮助吗?我是新人,仍在学习 docker
提前致谢!
更新:这是我尝试过的其他事情:
1.更改 CMD 以CMD ["./usr/src/${APP_NAME}/${APP_NAME}"]
返回错误golang-linkaja | sh: 1: /usr/src/golang-linkaja/golang-linkaja: not found
2.更改为CMD [ "./golang-linkaja" ]并CMD [ "./${APP_NAME}" ]
返回错误ERROR: for golang-linkaja Cannot start service app: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "./golang-linkaja": stat ./golang-linkaja: no such file or directory: unknown
您需要 - api:/usr/src/${APP_NAME}从您的作品中删除该卷。您已经将需要的内容复制到您的Dockerfile. 卷(在撰写中定义)将覆盖您的所有数据,因此找不到您构建的二进制文件。
只需删除卷并尝试重建并再次启动容器....并将 cmd 更改为CMD [ "./${APP_NAME}" ]
| 归档时间: |
|
| 查看次数: |
6225 次 |
| 最近记录: |