在 docker compose /bin/sh 中找不到可执行文件:1:主要:找不到

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

Lin*_*nPy 7

您需要 - api:/usr/src/${APP_NAME}从您的作品中删除该卷。您已经将需要的内容复制到您的Dockerfile. 卷(在撰写中定义)将覆盖您的所有数据,因此找不到您构建的二进制文件。

只需删除卷并尝试重建并再次启动容器....并将 cmd 更改为CMD [ "./${APP_NAME}" ]