我已经寻找答案有一段时间了,但我还没有找到它,在继续测试之前我需要理解它。
我正在通过安装 bash 创建基于 Alpine 的映像,如下图所示:
FROM alpine:3.12
RUN apk add --no-cache --upgrade bash rsync gzip \
&& rm -rf /var/cache/apk/*
COPY ./docker/backup/hello.sh /hello.sh
RUN mkdir /backup \
&& chmod u+x /hello.sh
WORKDIR /backup
ENTRYPOINT ["sh","/hello.sh"]
CMD ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)
你好.sh
#!/bin/sh
echo "=> Hello Word"
echo "$@"
exec "$@"
Run Code Online (Sandbox Code Playgroud)
我第一次尝试 bash 时无法使用以下命令访问:
docker-compose exec myalpine bash
Run Code Online (Sandbox Code Playgroud)
但是搜索是否找到答案,我必须放入 docker-compose.yml ,并且在启动命令后tty: true
我已经能够访问容器 shellmyalpine
docker-compose up -d
导致我的 docker-compose.yml 的一部分如下
services:
myalpine:
build:
context: ./
dockerfile: ./docker/backup/Dockerfile
args:
- DOCKER_ENV=${DOCKER_ENV}
restart: …
Run Code Online (Sandbox Code Playgroud) 我有一个 react-app,它简单地显示 hello-world 消息,但我喜欢通过 docker-container 运行该应用程序,但遇到了这个问题。此消息后,进程停止而不运行应用程序..
? ?wds?: Project is running at http://172.17.0.2/
? ?wds?: webpack output is served from
? ?wds?: Content not from webpack is served from /app/public
? ?wds?: 404s will fallback to /
Starting the development server...
Run Code Online (Sandbox Code Playgroud)
无法理解我应该做什么,因为我在 Dockerfile 中有一个带有基本代码的非常小的应用程序
FROM node:alpine
RUN mkdir /app
COPY . /app
WORKDIR /app
COPY package.json ./
RUN npm install
CMD ["npm", "start"]
Run Code Online (Sandbox Code Playgroud)
我是否需要安装 webpack-dev-server,我试过了,但出现版本错误,例如“手动添加的服务器”的版本低于已经服务器的版本。所以我重新安装了 webpack-dev-server。
我已经用“create-react-app”创建了应用程序,所以我认为每个依赖项都是自动管理的..有谁知道,我该如何解决问题..提前致谢(顺便说一句..)
我用来构建的命令: docker build . -t lucki
运行镜像命令: docker run -p 3000:3000 lucki
这是项目结构: …
docker run -idt ubuntu:16.04
, 之后我们可以使用docker ps
来查看容器的启动情况。
但是如果使用 docker compose as next 和 docker-compose up,我们可以看到docker ps
找不到容器,从docker ps -a
我们可以看到它退出了。
version: '2'
services:
me:
image: 'ubuntu:16.04'
Run Code Online (Sandbox Code Playgroud)
问题:我们如何实现-idt
使用 docker compose?
我创建了一个运行命令行工具的Docker容器。该容器应该是交互式的。我能以某种方式在Dockerfile中指定容器始终以交互方式启动吗?
作为参考,这是dockerfile:
FROM ubuntu:latest
RUN apt-get update && apt-get -y install curl
RUN mkdir adr-tools && \
cd adr-tools && \
curl -L https://github.com/npryce/adr-tools/archive/2.2.0.tar.gz --output adr-tools.tar.gz && \
tar -xvzf adr-tools.tar.gz && \
cp */src/* /usr/bin && \
rm -rf adr-tools
CMD ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)
编辑:我知道-it
该run
命令的选项。我明确要求在docker文件中执行此操作的方法。
EDIT2:这不是Dockerfile中的Interactive命令的重复项,因为我的问题解决了如何docker run
避免指定为的参数的问题,而有利于在Dockerfile中指定它们,而假定的重复项解决了图像构建期间的交互式输入问题由码头工人本身。
Grpc Greeter Service
我和客户一起做了一个简单的。当服务托管在本地主机上时,客户端能够调用 rpc 并接收响应。但是,当服务在本地主机上的 docker 容器内运行时,客户端无法连接到该服务。
** Grpc 服务服务器 **
namespace GreeterServer
{
class Program
{
private readonly static ManualResetEvent shutdown = new ManualResetEvent(false);
static void Main(string[] args)
{
int port = 5000;
Console.WriteLine("Hello World!");
Server server = new Server{
Services = {GreeterService.BindService(new GreeterController())},
Ports = {new ServerPort("localhost", port, ServerCredentials.Insecure)}
};
server.Start();
Console.WriteLine("Grpc Server started");
Console.Read();
shutdown.WaitOne();
}
}
}
Run Code Online (Sandbox Code Playgroud)
** Grpc 服务的 Dockerfile **
FROM microsoft/dotnet:2.1-sdk as base
WORKDIR /app
COPY *.csproj .
RUN dotnet restore
COPY …
Run Code Online (Sandbox Code Playgroud) 一个小而有趣的问题(对我来说):
我正在尝试从我编写的小型服务器(nodejs + express)创建 docker 映像。我的服务器代码是:
var express = require('express');
var Inflector = require('inflected');
var colors = require('colors');
var app = express();
app.get('/hello/:name', function(req, res, next){
var name = Inflector.titleize(req.params.name);
console.log("Saying hello to " + name.yellow);
res.send('Hello ' + name);
});
var port = 9090;
app.listen(port, function(){
console.log(('App is running on port ' + port).inverse);
});
Run Code Online (Sandbox Code Playgroud)
我正在用这个 Dockerfile 创建我的图像:
FROM centos:centos6
RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
RUN yum install -y npm
COPY . /src
RUN cd /src; npm install
EXPOSE 9090 …
Run Code Online (Sandbox Code Playgroud) 我想在容器中以交互方式运行一个简单的 dotnet core 控制台应用程序。我无法做到这一点,容器只是启动然后立即退出,而没有完全运行程序。
控制台应用程序只有以下三个语句。
Console.WriteLine("Hello World!");
var readText = Console.ReadLine(); // Wait for me to enter some text
Console.WriteLine(readText);
Run Code Online (Sandbox Code Playgroud)
最后两行使其具有交互性。
当我运行容器时,它会打印 Hello World! 但它立即退出,没有等我输入一些文本。为什么?我缺少什么?
我能够以类似的方式在容器中运行 dotnet core Web 应用程序,并且能够映射容器外部和容器内部的端口以成功浏览 Web 应用程序。但当谈到控制台应用程序时,我被难住了。
我想我可能缺少一些非常简单的东西。使我抓狂
重现步骤如下所述。