Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker run<;图像>;始终使用标准的“u init”linux.go:207:exec用户进程导致错误”;没有这样的文件或目录;在窗户上_Docker - Fatal编程技术网

Docker run<;图像>;始终使用标准的“u init”linux.go:207:exec用户进程导致错误”;没有这样的文件或目录;在窗户上

Docker run<;图像>;始终使用标准的“u init”linux.go:207:exec用户进程导致错误”;没有这样的文件或目录;在窗户上,docker,Docker,我试图从Dockerfile中编写一个docker组件,但失败了,错误为standard\u init\u linux。go:207:exec用户进程导致“没有这样的文件或目录” 我已经尝试了所有的方法,包括重新安装docker,但似乎不起作用 docker-compose.yml: version: "3" volumes: postgres_data: driver: local bundle_cache: driver: local services: po

我试图从Dockerfile中编写一个
docker组件
,但失败了,错误为
standard\u init\u linux。go:207:exec用户进程导致“没有这样的文件或目录”

我已经尝试了所有的方法,包括重新安装docker,但似乎不起作用

docker-compose.yml:

version: "3"

volumes:
  postgres_data:
    driver: local
  bundle_cache:
    driver: local

services:
  postgres:
    image: postgres:11
    volumes:
      - postgres_data:/var/lib/postgresql/data
    logging:
      driver: "none"
    ports:
      - "${POSTGRES_PORT}:5432"

  web-tracking:
    build:
      context: .
    tty: true
    stdin_open: true
    env_file:
      - ./.env
    depends_on:
      - postgres
    links:
      - postgres
    ports:
      - "${RAILS_PORT}:3000"
    volumes:
      - ./:/app:delegated
      - bundle_cache:/bundle
Dockerfile:

FROM ruby:2.6.3

EXPOSE 3000
WORKDIR ./app

RUN \
  apt-get update -qq && \
  apt-get install -y --no-install-recommends \
  nodejs \
  postgresql-client

ENV BUNDLE_PATH=/bundle \
  BUNDLE_BIN=/bundle/bin \
  GEM_HOME=/bundle
ENV PATH="${BUNDLE_BIN}:${PATH}"

COPY docker-entry.sh .

ENTRYPOINT ["/app/docker-entry.sh"]
CMD ["rails", "server", "-b", "0.0.0.0"]
docker-entry.sh

#!/bin/sh
set -e

# if the server was not shut down properly the pid file will need to be removed
if [ -f tmp/pids/server.pid ]; then
  rm tmp/pids/server.pid
fi
bundle install
bundle exec "$@"

根本原因是
docker entry.sh
,您在windows上设置了此文件。在windows上,换行符是
\r\n
,当您最终在linux容器中运行它时,换行符是
\n

因此,您应该输入类似于
gitbash
的内容,然后执行
dos2unix docker entry.sh
更改格式,重新生成并重新运行它,就可以了

另一种解决方案是在生成和更改
Dockerfile
中的格式时安装dos2unix,如next(您可能还需要更改其权限):


我在Ubuntu 16.04上运行你的堆栈没有问题。如果您在Windows上运行,可能需要使用dos2unix运行docker-entry.sh脚本()

当我开始使用docker时,我第一次尝试使用docker compose。 所以,我意识到学习docker和docker一起创作对我来说非常困难, 因为你在混乱的命令和配置中迷失了方向。 要开始我为您推荐,请尝试仅使用Dockerfile并连接“postgres”和“web tracking”
具有称为“用户定义桥”(user-definedbridges)的docker网络的容器

Dockerfile将
WORKDIR
设置为
/app
(=
${PWD}/app
)<代码>docker条目。sh复制到那里。但是
入口点使用
/app
。我认为
WORKDIR
也应该是
/app
@DazWilkin,这是我为了让
docker compose
工作而搞砸的东西。这实际上不在原始文件中。但我不能纠正它,否则堆栈溢出会说我发布了太多代码,所以“_(ツ)_/“这不好,行为取决于基本映像,但这里基本映像的工作目录是
/
,因此
//app
/app
一样。”
FROM ruby:2.6.3

EXPOSE 3000
WORKDIR ./app

RUN \
  apt-get update -qq && \
  apt-get install -y --no-install-recommends \
  nodejs \
  postgresql-client \
  dos2unix

ENV BUNDLE_PATH=/bundle \
  BUNDLE_BIN=/bundle/bin \
  GEM_HOME=/bundle
ENV PATH="${BUNDLE_BIN}:${PATH}"

COPY docker-entry.sh .
RUN dos2unix ./docker-entry.sh && chmod 777 ./docker-entry.sh

ENTRYPOINT ["/app/docker-entry.sh"]
CMD ["rails", "server", "-b", "0.0.0.0"]