Docker无法链接到非运行容器

我需要用docker-compose创buildrails和mysql容器,当我尝试创build链接容器与docker-compose up我得到

无法启动容器9b271c58cf6aecaf017dadaf5b无法链接到非运行容器:/ puma_db_1 AS / puma_web_1 / db

Dockerfile

 FROM ubuntu:14.04 RUN apt-get -y update RUN apt-get -y install git curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev RUN apt-get -y install libmysqlclient-dev RUN git clone https://github.com/sstephenson/rbenv.git /root/.rbenv RUN git clone https://github.com/sstephenson/ruby-build.git /root/.rbenv/plugins/ruby-build RUN echo 'eval "$(rbenv init -)"' >> $HOME/.profile RUN echo 'eval "$(rbenv init -)"' >> $HOME/.bashrc RUN rbenv install 2.1.5 RUN rbenv global 2.1.5 RUN gem install rails -v 4.0.11 ADD app.tar.gz /home/ WORKDIR /home/app RUN bundle install EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"] 

泊坞窗,compose.yml

 db: image: mysql:latest environment: MYSQL_DATABASE: app_development MYSQL_USER: mysql DATABASE_PASSWORD: onetwo ROOT_PASSWORD: onetwo web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - "4000:3000" links: - db 

db容器很可能无法启动。

确保它通过仅启动db服务正常工作。 你可以用下面的命令来做到这一点:

 docker-compose up db 

如果出现这个命令后MySQL服务没有运行,那么你find了问题的根源。

与MySQL没有特别的关系,但更多的信息是ERROR: for <service> Cannot link to a non running container: /b2f21b869ccc_<dependency>_1 AS /<service>_1/<dependency>_1

我发现依赖容器有一个不同的id(我上面的例子中的b2f21b869ccc

只需运行docker-compose up -d --force-recreate <service>

导致它重新创build依赖关系,并修复了正确的docker id链接

对我来说,它并没有帮助运行docker-compose up db。

这为我做了诡计:

sudo service docker restart

然后继续使用docker-compose up(-d)

您可能会尝试dockernetworking的新function。为此,您必须删除docker-compose.yml中的链接参数,并使用-x --x-networking option初始化容器。

 docker-compose --x-networking up -d 

为了防止docker生成容器的随机名,这些容器被添加到每个容器的相应networking的/ etc / hosts文件中,可以使用docker-compose.yml中container_name:

 db: container_name: db image: mysql:latest environment: MYSQL_DATABASE: app_development MYSQL_USER: mysql DATABASE_PASSWORD: onetwo ROOT_PASSWORD: onetwo web: container_name: web build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - "4000:3000" 

问题:

  • docker-compose成功构build一组Images ,但是其中一个Images无法运行(例如,启动到它自己的Container )时,我得到了这个错误。

  • 在这种情况下,我怀疑你的puma_db_1 ContainerImage无法run 。 你可以通过运行docker ps -a来find这个Image的名字。 这就是说,它的名字很可能是puma_db

解:

  • 为了解决这个问题,你可以尝试docker-compose up <service_name>或者docker-compose up db

  • 或者,通过运行docker run <image_name>find错误消息更有用。 在这种情况下,这将是docker run puma_db

对于mssql.link ,我有同样的问题,因为我不使用本地数据库(而是使用我们在分段中的那个),我只需要通过编辑Dockerfile脚本进行注释:

 # DOCKER_ARGS="${DOCKER_ARGS} --link mssql-server-linux:mssql.link" 

这个解决scheme可能会帮助别人,也可能是没有人,但它为我:)