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

我试图在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}

这是我的 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



繁星点点滴滴
浏览 208回答 2
2回答

子衿沉夜

您需要从撰写中删除该卷。您已经在 .卷(在 compose 中定义)正在覆盖所有数据,因此找不到构建的二进制文件。 - api:/usr/src/${APP_NAME}Dockerfile只需删除卷,然后尝试重建并再次启动容器....并将您的 cmd 更改为CMD [ "./${APP_NAME}" ]

侃侃尔雅

在 Dockerfile 中,您尝试在不使用前缀的情况下运行可执行文件,因此操作系统在系统文件夹上搜索可执行文件,但找不到它。添加 CMD 的开头或使用可执行文件的绝对路径。././#Command to run the executable CMD ./${APP_NAME}或#Command to run the executable CMD /usr/src/${APP_NAME}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go