我正在尝试使用node和mongo运行一个简单的docker设置:
Dockerfile:
FROM node:8.9.4-alpine
RUN mkdir /app
WORKDIR /app
COPY package.json /app/
COPY package-lock.json /app/
RUN npm install
ADD . /app/
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml:
version: '3'
services:
db:
image: 'mongo'
ports:
- "27017:27017"
api:
build: .
restart: always
command: sh -c "npm install && npm run start"
volumes:
- .:/app
ports:
- "3000:3000"
environment:
PORT: 3000
depends_on:
- db
Run Code Online (Sandbox Code Playgroud)
现在在我的app.js中,我像这样连接到mongo:
mongoose.connect('mongodb://localhost:27017')
.catch(err => {
console.log(err)
})
Run Code Online (Sandbox Code Playgroud)
但是我得到了 failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017] …
我为php开发做了一个简单的自定义docker设置.到目前为止一切都按预期工作.我唯一无法弄清楚的是为什么apache2不会自动启动.
这是我的dockerfile:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y apache2 php libapache2-mod-php php-mcrypt php-mysql php-cli php-curl php-xml php-intl php-mbstring git vim composer curl
COPY . /var/www/example
COPY vhost.conf /etc/apache2/sites-available/example.conf
RUN a2ensite example
RUN chown -R www-data:www-data /var/www/example/logs
RUN service apache2 restart
Run Code Online (Sandbox Code Playgroud)
这是我的docker-compose.yml:
version: '2'
services:
app:
build:
context: .
dockerfile: Dockerfile
image: myexampleapp
ports:
- 8080:80
tty: true
Run Code Online (Sandbox Code Playgroud)
这是输出docker-compose up命令:
me@mydell:~/workspace/mydockercompose$ docker-compose up -d --build
Creating network "mydockercompose_default" with the default driver
Building app
Step 1/7 : FROM …Run Code Online (Sandbox Code Playgroud) 我在访问应通过docker-compose将端口公开给主机的应用程序时遇到问题。这是一个可重现的示例:
我使用角度CLI创建一个新的角度应用程序:
ng new angular-docker
Run Code Online (Sandbox Code Playgroud)
然后,我在该目录中创建一个包含以下内容的Dockerfile:
FROM node:8
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN npm install
EXPOSE 4200
CMD ["npm", "start"]
Run Code Online (Sandbox Code Playgroud)
接下来,我在同一目录中创建一个docker-compose.yaml文件:
version: '3'
services:
angular:
build: .
container_name: angular-docker
volumes:
- ./src:/usr/src/app/src
ports:
- "4200:4200"
Run Code Online (Sandbox Code Playgroud)
然后我运行:
docker-compose up
Run Code Online (Sandbox Code Playgroud)
我等到在docker-compose输出中得到以下行
angular-docker | ** Angular Live Development Server is listening on localhost: 4200, open your browser on http://localhost:4200/ **
Run Code Online (Sandbox Code Playgroud)
从docker inspect angular-docker我看到的端口转发规则到位:
...
"Ports": {
"4200/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "4200"
}
]
}, …Run Code Online (Sandbox Code Playgroud) 我正在使用REST API创建部署/服务。我发送带有包含JSON对象的正文的POST请求,该JSON对象在Openshift上创建应用程序。在调用所有API之后,这些对象将被实例化。
我有2个依赖于mongodb部署的部署,但是此mongodb需要花费一点时间才能开始运行,而依赖mongodb的两个部署则更早开始运行。由于mongodb连接失败(因为它尚未启动),因此这会破坏2个部署中的代码。
有2种可能的方法可以解决此问题。
在创建mongodb部署后,我延迟了一段时间,然后递归调用API以检查其状态(如果它没有运行)。
就像我们在docker-compose中进行更改一样,使用键depends-on告诉docker-compose首先应启动所有依赖项,然后再启动依赖项容器。
Openshift有什么方法可以实现?
我在mongodb上运行Rails api服务器,都可以完美地找到工作,然后我开始将服务器移至docker。
不幸的是,每当我停止服务器(docker-compose down)并重新启动服务器时,所有数据都会丢失,并且数据库完全为空。
这是我的docker-compose文件:
version: '2'
services:
mongodb:
image: mongo:3.4
command: mongod
ports:
- "27017:27017"
environment:
- MONGOID_ENV=test
volumes:
- /data/db
api:
build: .
depends_on:
- 'mongodb'
ports:
- "3001:3001"
command: bundle exec rails server -p 3001 -b '0.0.0.0'
environment:
- RAILS_ENV=test
links:
- mongodb
Run Code Online (Sandbox Code Playgroud)
这是我的dockerfile:
FROM ruby:2.5.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
ENV APP_HOME /app
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
COPY Gemfile* $APP_HOME/
RUN bundle install
COPY . $APP_HOME
RUN chown -R …Run Code Online (Sandbox Code Playgroud) docker-ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
83b1503d2e7c app_nginx "nginx -g 'daemon ..." 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp app_nginx_1
c9dd2231e554 app_web "/home/start.sh" 2 hours ago Up 2 hours 8000/tcp app_web_1
baad0fb1fabf app_gremlin "/start.sh" 2 hours ago Up 2 hours 8182/tcp app_gremlin_1
b663a5f026bc postgres:9.5.1 "docker-entrypoint..." 25 hours ago Up 2 hours 5432/tcp app_db_1
Run Code Online (Sandbox Code Playgroud)
他们都很好:
没有工作文件:
泊坞窗,compose.yaml
version: '3'
services:
db:
image: postgres:9.5.12
web:
build: .
expose:
- "8000"
depends_on:
- gremlin
command: /home/start.sh …Run Code Online (Sandbox Code Playgroud) 我正在尝试为需要服务在后台运行的项目创建一个docker-compose。服务映像已存在,其中包含配置文件以及入口点[“ / usr / bin / java”,...]
我想更改配置文件的内容,但是我不确定在没有创建额外的dockerfile来重新创建具有适当文件的映像的情况下,做到这一点的最佳方法是什么?
由于入口点是/ usr / bin / java,所以我不确定如何使用docker-compose的命令来修改文件内容。
version: 2
services:
myService:
image: serviceA from registry
# Would like to modify a config file's content...
mainAPI:
...
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在对我的symfony应用程序进行docker化,但是我无法弄清楚为什么会出现以下错误:
web_1 | 2018/09/11 07:21:40 [emerg] 1#1: invalid number of arguments in "try_files" directive in /etc/nginx/conf.d/default.conf:6
web_1 | nginx: [emerg] invalid number of arguments in "try_files" directive in /etc/nginx/conf.d/default.conf:6
Run Code Online (Sandbox Code Playgroud)
这是我的配置:
server {
server_name localhost;
root /application/web;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/(index)\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/project_error.log;
access_log /var/log/nginx/project_access.log;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的docker-compose.yml:
version: "3"
services:
web:
image: nginx:latest
volumes: …Run Code Online (Sandbox Code Playgroud) 我想使用env文件中定义的端口号,可以吗?以下是我的docker-compose.yml的内容:
version: '3'
services:
flask:
build:
context: ./flask
dockerfile: Dockerfile_flask
env_file:
- env_file.env
ports:
#- "5000:5000"
- "${PORT}:${PORT}" # I want to set port defined in the env file
volumes:
- ./logs:/app/flask/log
restart: always
Run Code Online (Sandbox Code Playgroud)
这是env_file.env的内容
PORT=5000
Run Code Online (Sandbox Code Playgroud)
但是出现了一些错误:
WARNING: The PORT variable is not set. Defaulting to a blank string.
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.flask.ports is invalid: Invalid port ":", should be [[remote_ip:]remote_port[-remote_port]:]port[/protocol]
Run Code Online (Sandbox Code Playgroud)
如果有可能,我应该怎么做?谢谢
@lvthillo,感谢您之前的回复。但是我还有另一个问题,就是我的烧瓶应用程序无法访问该端口。代码如下所示
import os
from flask import Flask
application = Flask(__name__)
print(os.getenv("PORT")) # this …Run Code Online (Sandbox Code Playgroud) 我当前的docker-compose.yml-
# This docker-compose file uses '.env' file present in the current directory,
# for database credentials. If you want to change the credentials please
# change the data in '.env'.
# '.env' file might be hidden as dot files are hidden please unhide to see it.
# Know more about '.env' file: https://docs.docker.com/compose/env-file/
version: '3'
services:
postgresdb:
image: postgres:9.5
environment:
POSTGRES_USER: ${ENV_POSTGRES_USER}
POSTGRES_PASSWORD: ${ENV_POSTGRES_PASSWORD}
POSTGRES_DB: ${ENV_POSTGRES_DB}
volumes:
- "../app/volumes/postgres/data:/var/lib/postgresql/data"
# This is python service. It uses python 3.6 as …Run Code Online (Sandbox Code Playgroud) docker ×10
docker-compose ×10
mongodb ×3
dockerfile ×2
apache ×1
express ×1
kubernetes ×1
mongoose ×1
nginx ×1
openshift ×1
port ×1
symfony ×1
ubuntu ×1